服务和客户端应用程序之间的 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/ 所以您无法从 XCode 启动 XPC? 【参考方案1】:

对于所有使用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 启动时才有效的主要内容,如果未能解决你的问题,请参考以下文章

谈谈Mac进程间通信--XPC

有没有办法通过 XPC 传递任意结构?

NSXPCConnection 或 XPCKit

使用 XPC 与另一个应用程序通信

XPC 客户端等待服务加载

非常简单的 macOS XPC