通过 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上使用MTLSharedTextureHandle或MTLSharedEventHandle与C XPC接口?