服务和客户端应用程序之间的 XPC 通信仅在从 xcode 启动时才有效
Posted
技术标签:
【中文标题】服务和客户端应用程序之间的 XPC 通信仅在从 xcode 启动时才有效【英文标题】:XPC communication between service and client app works only when launched from xcode 【发布时间】:2013-11-09 19:13:25 【问题描述】:当我从 Xcode 启动目标时,XPC 通信工作正常。但是,当我通过双击图标手动启动服务和客户端应用程序时,会显示连接无效消息。为什么它们在 xcode 内部工作正常而不是从外部工作? .
【问题讨论】:
我似乎遇到了类似的问题。你最终找到了根本原因吗? 是的,我将 XPC 信息 plist 从 xcode 项目复制到 /System/Library/LaunchDaemons。在 xcode 之外,要启动应用程序,我必须使用 launchctl。例如:launchctl load /System/Library/LaunchDaemons/对于所有使用xpc_connection_create_mach_service
遇到相同问题的人:XPC 可以处理很多已启动的东西;当我们在 xCode 中调试应用程序时,它会调解应用程序和启动连接,但如果没有 xCode,我们需要自己做。
要让它活着,应该通过launchd 使用launch plist 文件来启动它。
有一个这样的 plist here 的例子,但这还不够。
诀窍是MachServices
键,它看起来像:
<key>MachServices</key>
<dict>
<key>com.server.bundle-id</key>
<true/>
</dict>
这是我们创建 mach 服务的方式,所以我猜我们的 XPC 连接下面可能有一些 mach 端口。
【讨论】:
以上是关于服务和客户端应用程序之间的 XPC 通信仅在从 xcode 启动时才有效的主要内容,如果未能解决你的问题,请参考以下文章