【问题标题】:SMJobBless failed with CFErrorDomainLaunchd Code 9SMJobBless 因 CFErrorDomainLaunchd 代码 9 而失败
【发布时间】:2015-11-19 01:07:05
【问题描述】:

有人知道那个错误代码是什么意思吗? 我收到此返回代码值的 SMJobBless 错误。

Failed to bless helper: Error Domain=CFErrorDomainLaunchd Code=9 "The operation couldn’t be completed. (CFErrorDomainLaunchd error 9.)"

我用谷歌搜索,在博客文章、Apple Docs、here 中查找答案,但找不到答案这是什么以及如何解决它。人们说(在一些支持论坛上,重新安装 OS X 对他们有帮助)。

几周前我正在进行的项目中已经发生了这种情况,唯一帮助我修复它的是更改我的帮助工具的名称。现在又发生了。

我的代码在其他计算机上运行的同时,只有我的工作站受到此问题的影响。

更新: 重命名后,它再次工作。现在我的系统上有两个帮助工具包标识符“禁止”:-(

更新 2: 它也发生在其他计算机上:-(

【问题讨论】:

  • 你是如何对你的辅助工具进行代码设计的?
  • @l'L'l XCode 做到了这一点。宿主应用程序和帮助工具使用开发者 ID 进行签名。我在宿主应用程序中使用 Qt 框架,并在构建后脚本中单独对其进行签名。
  • 我在一台计算机上遇到了这个问题。在数十台(可能数百台)其他机器上运行良好。我希望我们知道为什么不一致。

标签: macos cocoa launchd xpc smjobbless


【解决方案1】:

在我的情况下是错误

祝福助手失败:Error Domain=CFErrorDomainLaunchd Code=9 "操作无法完成。(CFErrorDomainLaunchd error 9.)"

表示帮助工具已添加到此处的永久禁用服务列表中:

/private/var/db/com.apple.xpc.launchd/disabled.plist

我是说优胜美地,旧/新的操作系统版本可能在这里有它们(我还没有检查过):

/var/db/launchd.db/com.apple.launchd.peruser.*user_id*/overrides.plist

在阅读了launchctl手册页之后,我发现“卸载”子命令的参数-w将服务添加到这个plist文件中。我在卸载脚本中使用了这个标志,导致下次无法“祝福”工具。

似乎无法从 disabled.plist 文件中删除服务。每次重新启动时,文件都会从启动缓存中恢复,并且刷新缓存似乎还没有实现。只能永远启用服务,所以 launchd 不会阻止它启动。

这里有几个链接可能对遇到类似问题的人有用:

【讨论】:

  • “似乎无法从 disabled.plist 文件中删除服务。”虚假陈述:sudo launchctl enable system/com.example.service
  • High Sierra 之后显然是这样(根据下面的答案)。最初的问题(和这个答案)与明确说明的优胜美地有关。
【解决方案2】:

使用 High Sierra(可能是之前,但我不知道从什么时候开始),有几个帮助 launchctl 子命令。

launchctl print-disabled system

将列出明确禁用的服务。请务必检查false/true 值。

启用已禁用的服务

sudo launchctl enable system/com.example.service

另外,作为记录,/System/Library/Frameworks/ServiceManagement.framework/Versions/A/Headers/SMErrors.h 可以阅读:

enum {
        kSMErrorInternalFailure = 2,
        kSMErrorInvalidSignature,
        kSMErrorAuthorizationFailure,
        kSMErrorToolNotValid,
        kSMErrorJobNotFound,
        kSMErrorServiceUnavailable,
        kSMErrorJobPlistNotFound,
        kSMErrorJobMustBeEnabled,
        kSMErrorInvalidPlist,
};

代码 9 (kSMErrorJobMustBeEnabled) 比“操作无法完成”更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2019-06-08
    • 2015-01-19
    相关资源
    最近更新 更多