通过 XPC 或 MACH 在 OSX 上启动服务

Posted

技术标签:

【中文标题】通过 XPC 或 MACH 在 OSX 上启动服务【英文标题】:Talking to launch services on OSX through XPC or MACH 【发布时间】:2012-08-29 15:53:25 【问题描述】:

我想知道第三方开发人员是否可以通过 XPC 或 Mach 与启动代理和守护程序进行交互。我的理解是第三方必须知道 XPC 的字典格式或访问 Mach 的 .defs 文件。这些是否可用于预安装的启动服务?如果没有,那么还有其他方式可以通过代码与服务交互吗?

【问题讨论】:

【参考方案1】:

你的理解是正确的。对于 Mach,.defs 文件用作 Mach 接口生成器 (MIG) 的输入,它创建用于序列化 mach 消息中的参数、调用 mach_msg、等待回复和反序列化回复的 C 代码。 XPC 还在幕后使用 mach 消息,顺便说一句(尽管 Apple 真的没有告诉你)。

Apple 不会为预安装的启动服务显示任何内容。他们确实提供了 launchd 本身的源代码(尽管由于未提供 libxpc.dylib,最新版本无法编译,这不足为奇)。

可以做的是挂钩 mach_msg(或覆盖的 xpc_* 消息函数 - 这可能有点困难,因为大多数是异步的,并且实际消息是由 GCD 线程提供的)。

【讨论】:

以上是关于通过 XPC 或 MACH 在 OSX 上启动服务的主要内容,如果未能解决你的问题,请参考以下文章

NSWorkspace runningApplications 不返回我的 XPC mach 服务

哪个处理程序在 macos xpc 中处理来自服务器的回复

如何在macOS上使用MTLSharedTextureHandle或MTLSharedEventHandle与C XPC接口?

XPC 和跨架构 OSX 应用程序

XPC 服务未从 Xcode 源代码编辑器扩展启动(`仍然很忙`)

非常简单的 macOS XPC