XPC 没有为 XPC 服务创建任何进程

Posted

技术标签:

【中文标题】XPC 没有为 XPC 服务创建任何进程【英文标题】:XPC not creating any processes for XPC services 【发布时间】:2012-10-30 19:45:19 【问题描述】:

我正在尝试创建 XPC 服务,但似乎没有创建该服务。在我的服务的主要方法中,我做的第一件事是调用 syslog 以便我可以查看服务是否开始运行。这些日志消息永远不会出现在日志中。

我检查了所有包标识符、可执行文件名称和包层次结构,但似乎仍然没有创建服务。在应用程序中,当我通过 XPC 服务连接创建并发送消息后,立即调用我的事件处理程序并出现 XPC_ERROR_CONNECTION_INVALID 错误。我正在使用基于 C 的 XPC API。

我还可以尝试做些什么来确保至少创建 XPC 服务吗?

【问题讨论】:

您好,或许您可以告诉我如何查看所有 xpc 服务(是由 launchctl 还是其他命令完成的?)谢谢! 【参考方案1】:

原来我需要对应用程序目标和 XPC 服务目标进行代码签名。这可以在 Xcode 项目构建设置中完成,并且可以设置为“Ad-hoc Code Sign”,而无需 Mac 开发者证书。

【讨论】:

知道如何在 XCode6 中做到这一点吗? 您仍然可以在 Xcode 6 中以这种方式更改代码签名设置。【参考方案2】:

还要检查您的服务名称。我发现项目模板中的默认示例不包含完全限定名称。在客户端代码中,我不得不更改:

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithServiceName:@"MyNetworkClient"];

到这里:

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithServiceName:@"com.example.MyNetworkClient"];

仔细检查 XPC 目标的 Bundle ID 是否是您用于服务名称的 ID。就我而言,它没有启动 XPC,也没有显示任何错误或控制台日志。

【讨论】:

谢谢!默认的 XPC 服务模板不正确,这非常烦人。 您好,或许您可以告诉我如何查看所有 xpc 服务(是通过 launchctl 还是其他命令完成的?)谢谢! 有没有办法以编程方式验证名称?它现在可以工作,但我担心这会在未来的重构中默默地中断,没有太多的调试痕迹。 @Alexander 不,我认为您无法验证。通常,这些是您在代码库中控制的服务。所以集成测试将是验证它是否有效的好方法 @JessBowers 嗯,我在从我的 quicklook 插件目标启动 XPC 服务时遇到问题。我已验证服务名称与 xpc 服务的 Bundle Identifier 匹配,并且我添加了一个构建步骤以将 XPC 服务复制到MyQuickLookplugin.qlgenerate/contents/XPCServices。您知道我可以采取的任何故障排除步骤吗?【参考方案3】:

我遇到了类似的错误,但解决方案是:clean, clean build folder, build.

然后,神奇地,它按预期工作了。

【讨论】:

以上是关于XPC 没有为 XPC 服务创建任何进程的主要内容,如果未能解决你的问题,请参考以下文章

谈谈Mac进程间通信--XPC

使用 XPC 创建守护进程/UI 连接

XPC 连接如何以线程方式处理?

非常简单的 macOS XPC

XPC 服务可以链接到嵌入它的框架吗?

如何禁用加载/激活 macOS xpc 服务?