运行 SMJobBless:
(PrefPane 项目 xcode 版本 4 Build 4A304a)
SMJobBless(kSMDomainSystemLaunchd, @"com.coderama.coderamaHelper", authRef, &err);
导致此错误:
System Preferences[22312:903] Bless Error: Error Domain=kSMErrorDomainFramework Code=5 UserInfo=0x2005790e0 "The operation couldn’t be completed. (kSMErrorDomainFramework error 5 - The tool at the specified path is not valid.)"
下面是我的列表。
任何人都可以破译错误消息,以便我尝试解决此问题吗?我检查了所有的 plist 以确保名称匹配。
coderama-info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.coderama.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2012 coderama. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>coderama</string>
<key>NSPrefPaneIconFile</key>
<string>show_wireframe_zoom_24.gif</string>
<key>NSPrefPaneIconLabel</key>
<string>coderama</string>
<key>NSPrincipalClass</key>
<string>coderama</string>
<key>SMPrivilegedExecutables</key>
<dict>
<key>com.coderama.coderamaHelper</key>
<string>identifier com.coderama.coderamaHelper and certificate leaf[subject.CN] = "Joe Developer"</string>
</dict>
</dict>
</plist>
coderamaHelper-info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.coderama.coderamaHelper</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>coderamaHelper</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>SMAuthorizedClients</key>
<array>
<string>identifier com.coderama.coderama and certificate leaf[subject.CN] = "Joe Developer"</string>
</array>
</dict>
</plist>
coderamaHelper-Launchd.plist 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.coderama.coderamaHelper</string>
<key>MachServices</key>
<dict>
<key>com.coderama.coderamaHelper.mach</key>
<true/>
</dict>
</dict>
</plist>
最佳答案
我也出现了这个错误,首先再次检查SMJobless项目的readme.txt中声明的步骤:
- 在应用程序中转到:Target/Build Phases/Copy Files and make
确保正确分配了参数:Destination = wrapper,
subpath = Contents/Library/LaunchServices,最后加载
守护进程或服务进入项目。 - 在应用程序中转到文件 info.plist 并检查以下键:“安装后拥有的工具”并将其设置为=
标识符 com.acme.MyService 和证书 leaf[subject.CN] =
“我的证书”。您必须将 MyService 和 MyCertificate 替换为
你自己的。 - 在辅助工具或守护程序中转到 info.plist 文件。在这里你必须添加一些键/值对,第一个是:“Clients allowed
添加和删除工具”必须设置为“标识符
com.acme.MyApp 和证书 leaf[subject.CN] = "MyCertificate"
,记得把 MyApp 和 MyCertificate 换成你自己的。 最后确保 THE DAEMON 在构建之前嵌入可执行文件本身,这是通过以下方式完成的: 在辅助工具或守护进程中转到目标/构建 Settings/Linking/Other Linker Flags 并添加以下内容:
-创建教派
__文本
__info_plist
我的守护进程/info.plist
-创建教派
__文本
_launchd_plist
MyDaemon/myDaemon-launchd.plist
确保替换 MyDaemon 以获得您自己开发的正确值。请注意您的信息和已启动文件的名称。
重要提示:守护进程或服务的名称必须与 INFO.PLIST 和 LAUNCHD.PLIST 文件中写入的名称一致,否则将生成错误 kSMErrorDomainFramework
错误 5 - 指定路径处的工具无效。
关于objective-c - SMJobBless 导致 kSMErrorDomainFramework 错误 5 - 指定路径的工具无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9546394/