繁体   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