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

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

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

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

【问题讨论】:

  • 您好,或许您可以告诉我如何查看所有 xpc 服务(是由 launchctl 还是其他命令完成的?)谢谢!

标签: ipc xpc


【解决方案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.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多