非常简单的 macOS XPC

Very simple macOS XPC

我想使用 XPC 技术来发射一个 app。我不需要任何进程间通信,也不需要 XPC 的任何其他功能。

我在互联网上能找到的唯一文档显示了一个复杂的结构,包含 XPC 服务的代码、通过脚本启动 XPC 服务的单独代码以及与服务通信的应用程序代码。

换句话说,我只想要与此等效的东西:

NSWorkspace.shared.openApplication(at: path,
                                   configuration: configuration,
                                   completionHandler: nil)

但使用 XPC。所以我需要一些类似的东西:

let listener = NSXPCListener.service("/path/to/my_app.app")
listener.resume()
RunLoop.main.run()

显然,服务方法不接受可执行路径的参数,因此这不起作用。

我该怎么做?

PS:为了解释动机,启动 XPC 服务将保留启动应用程序的沙箱限制,而直接通过 NSWorkspace.shared.openApplication 启动应用程序将不会保留沙箱限制(因为生成的应用程序没有 "com.apple.security.inherit" 作为权利)。

似乎不​​可能在更改沙箱时启动子进程(即赋予它比最初拥有的更多或更少的权利)。

我建议 stripping the sandboxing 从现有应用程序中适当修改权利,然后重新签名。这不是常规方法,但可以解决您的具体问题。