[英]SMJobBless causes kSMErrorDomainFramework error 5 - The tool at the specified path is not valid
(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.)"
以下是我的帖子。
任何人都可以破譯錯誤消息,以便我可以嘗試解決此問題嗎? 我已經查看了所有的帖子,以確保名稱匹配。
<?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>
<?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>
<?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中聲明的步驟:
最后確保在構建它之前將DAEMON嵌入到可執行文件中,這是通過以下方式實現的:在幫助工具或守護進程中轉到目標/構建設置/鏈接/其他鏈接器標志並添加以下內容:
-sectcreate
__文本
__info_plist
MyDaemon / info.plist中
-sectcreate
__文本
_launchd_plist
MyDaemon / myDaemon-launchd.plist
確保將MyDaemon替換為您自己開發的正確值。 請注意info和launchd文件的名稱。
重要提示 :DAEMON或服務的名稱必須與INFO.PLIST和LAUNCHD.PLIST文件中的相同名稱相對應,否則將產生錯誤kSMErrorDomainFramework
錯誤5 - 指定路徑上的工具無效。
一位Apple開發人員回復我說SMJobBless
僅適用於Applications。
如果輔助工具未捆綁在正確的位置,則會發生此錯誤,因此SMJobBless()
無法找到要安裝的工具。 在主應用程序目標的Build Phases
部分中,您必須添加Copy Files
構建階段。 添加幫助工具,將目標設置為Wrapper
,將子路徑設置為Contents/Library/LaunchServices
, SMJobBless()
將能夠找到您的幫助工具。
查看SMJobBless的文檔以獲取要求列表。 我的猜測是你錯過了第1步(對工具和應用程序進行代碼簽名)或第5步(將工具復制到應用包裝器中的正確位置)。
另外, [NSString @"com.coderama.coderamaHelper"]
毫無意義。 只需寫@"com.coderama.coderamaHelper"
。
如果所有其他方法都失敗了,請查看示例代碼的作用並遵循其示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.