非常简单的macOS XPC

问题描述 投票:0回答:1

我只想使用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”作为权利)。

swift macos sandbox xpc
1个回答
0
投票

[似乎不可能在更改沙箱的同时启动子进程(即,赋予它比原本应有的权利更多或更少的权利)。

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

© www.soinside.com 2019 - 2024. All rights reserved.