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

标签 objective-c cocoa

运行 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] = &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. 在应用程序中转到:Target/Build Phases/Copy Files and make
    确保正确分配了参数:Destination = wrapper,
    subpath = Contents/Library/LaunchServices,最后加载
    守护进程或服务进入项目。
  2. 在应用程序中转到文件 info.plist 并检查以下键:“安装后拥有的工具”并将其设置为=
    标识符 com.acme.MyService 和证书 leaf[subject.CN] =
    “我的证书”。您必须将 MyService 和 MyCertificate 替换为
    你自己的。
  3. 在辅助工具或守护程序中转到 info.plist 文件。在这里你必须添加一些键/值对,第一个是:“Clients allowed 添加和删​​除工具”必须设置为“标识符
    com.acme.MyApp 和证书 leaf[subject.CN] = "MyCertificate"
    ,记得把 MyApp 和 MyCertificate 换成你自己的。
  4. 最后确保 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/

相关文章:

objective-c - 不允许在带有源列表突出显示的 NSTableView 中进行空选择吗?

cocoa - 在 IB 的值绑定(bind)模型 key 路径中使用 KVC 运算符,例如 @unionOfSets/@sum

cocoa - 更改应用程序中的 Cocoa 显示名称?

objective-c - 自定义 NSView 更改背景颜色时崩溃

macos - 需要 AVPlayerView 在按下 esc 按钮时退出全屏

ios - 使用闭包快速调用 Objective-C 函数

ios - 如何在后台下载图像以在iOS中使用imageView进行设置?

objective-c - 将字符串传递给 NSTimer 的操作方法

ios - 访问当前 View 的父 View - iOS

objective-c - iOS/Objective-C - 如何检查枚举是否可用?