SMJobBless导致kSMErrorDomainFramework错误5 - 指定路径上的工具无效

Cod*_*ama 7 cocoa objective-c

运行SMJobBless:

(PrefPane项目xcode版本4 Build 4A304a)

SMJobBless(kSMDomainSystemLaunchd, @"com.coderama.coderamaHelper", authRef, &err);
Run Code Online (Sandbox Code Playgroud)

导致此错误:

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.)"
Run Code Online (Sandbox Code Playgroud)

以下是我的帖子.

任何人都可以破译错误消息,以便我可以尝试解决此问题吗?我已经查看了所有的帖子,以确保名称匹配.

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

wil*_*Mon 9

我也去了这个错误,首先再次检查SMJobless项目的readme.txt中声明的步骤:

  1. 在应用程序中转到:目标/构建阶段/复制文件并
    确保正确分配参数:Destination = wrapper,
    subpath = Contents/Library/LaunchServices,最后将
    守护程序或服务加载到项目中.
  2. 在应用程序中,转到文件info.plist并检查以下密钥:"安装后拥有的工具"并将其设置为=
    identifier com.acme.MyService和certificate leaf [
    subject.CN ] = "MyCertificate".您必须用
    自己的MyService和MyCertificate替换MyService和MyCertificate .
  3. 在帮助工具或守护进程中转到info.plist文件.在这里你必须添加一些键/值对,第一个是:"允许添加和删除工具的客户端",必须设置为"标识符
    com.acme.MyApp和证书leaf [subject.CN] ="MyCertificate"
    ,记得用你自己的替换MyApp和MyCertificate.
  4. 最后确保在构建它之前将DAEMON嵌入到可执行文件中,这是通过以下方式实现的:在帮助工具或守护进程中转到目标/构建设置/链接/其他链接器标志并添加以下内容:

    -sectcreate
    __TEXT
    __info_plist
    MyDaemon/info.plist
    -sectcreate
    __TEXT
    _launchd_plist
    MyDaemon/myDaemon-launchd.plist

确保将MyDaemon替换为您自己开发的正确值.请注意info和launchd文件的名称.

重要提示:DAEMON或服务的名称必须与INFO.PLIST和LAUNCHD.PLIST文件中的相同名称相对应,否则将产生错误kSMErrorDomainFramework错误5 - 指定路径上的工具无效.


Cod*_*ama 5

一位Apple开发人员回复我说,SMJobBless只适用于应用程序.