簡體   English   中英

SMJobBless導致kSMErrorDomainFramework錯誤5 - 指定路徑上的工具無效

[英]SMJobBless causes kSMErrorDomainFramework error 5 - The tool at the specified path is not valid

運行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.)"

以下是我的帖子。

任何人都可以破譯錯誤消息,以便我可以嘗試解決此問題嗎? 我已經查看了所有的帖子,以確保名稱匹配。

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] = &quot;Joe Developer&quot;</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] = &quot;Joe Developer&quot;</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中聲明的步驟:

  1. 在應用程序中轉到:目標/構建階段/復制文件並制作
    確保正確分配參數:Destination = wrapper,
    subpath = Contents / Library / LaunchServices,最后加載
    守護進程或服務進入項目。
  2. 在應用程序中,轉到文件info.plist並檢查以下密鑰:“安裝后擁有的工具”並將其設置為=
    標識符com.acme.MyService和證書leaf [subject.CN] =
    “MyCertificate”。 您必須替換MyService和MyCertificate
    你自己的。
  3. 在幫助工具或守護進程中轉到info.plist文件。 在這里你必須添加一些鍵/值對,第一個是:“允許添加和刪除工具的客戶端”,必須設置為“標識符”
    com.acme.MyApp和證書leaf [subject.CN] =“MyCertificate”
    ,請記住用自己的替換MyApp和MyCertificate。
  4. 最后確保在構建它之前將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/LaunchServicesSMJobBless()將能夠找到您的幫助工具。

查看SMJobBless的文檔以獲取要求列表。 我的猜測是你錯過了第1步(對工具和應用程序進行代碼簽名)或第5步(將工具復制到應用包裝器中的正確位置)。

另外, [NSString @"com.coderama.coderamaHelper"]毫無意義。 只需寫@"com.coderama.coderamaHelper"

如果所有其他方法都失敗了,請查看示例代碼的作用並遵循其示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM