我想简单地使用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“作为权利)。
发布于 2019-12-26 13:54:40
似乎不可能在更改沙箱的同时启动子进程(即,赋予它比最初幸运的更多或更少的权限)。
我推荐使用现有应用程序中的stripping the sandboxing,适当地修改授权,然后重新签名。这不是一种常规的方法,但可以解决您的特定问题。
https://stackoverflow.com/questions/59411555
复制相似问题