我只想使用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()
很明显,service方法没有采用可能是可执行路径的参数,因此这是行不通的。
我该怎么做?
PS:解释动机,启动XPC服务将保留启动应用程序中的沙箱限制,而直接通过NSWorkspace.shared.openApplication
启动应用程序将不会保留沙箱限制(因为生成的应用程序没有“ com.apple.security” .inherit”作为权利)。
[似乎不可能在更改沙箱的同时启动子进程(即,赋予它比原本应有的权利更多或更少的权利)。
我建议从现有应用程序中选择stripping the sandboxing,适当地修改权利,然后重新签名。这不是常规方法,但可以解决您的特定问题。