我需要在我的应用程序中的某个时间点进行提升操作。为此我找到了苹果的 SMJobBless 机制。我编写了一个简单的帮助工具并通过SMJobBless
. 到目前为止,这有效。但是我现在不明白的是:安装后如何启动该 Helper 工具?
2 回答
通过阅读我发现的几乎所有文档,我现在使用 XPC Conenction 来激活帮助工具,然后在使用SMBlessJob
. 为此,您需要通过plist
您的帮助工具创建一个 MachService:
<key>MachServices</key>
<dict>
<key>com.my.program.Helper</key>
<true/>
</dict>
(这需要在助手的 launchd.plist 中完成,而不是在 info.plist 中)。
在您的辅助工具中,您必须创建 Mach 服务:
@property (atomic, strong, readwrite) NSXPCListener *listener;
self->_listener = [[NSXPCListener alloc] initWithMachServiceName:@"com.my.program.Helper"];
self->_listener.delegate = self;
之后,您可以使用 XPC 进行连接。如果您需要这方面的更多信息,请参阅 Apple 的此示例:https ://developer.apple.com/library/content/samplecode/EvenBetterAuthorizationSample/Listings/Read_Me_About_EvenBetterAuthorizationSample_txt.html
不幸的是,Apple 几乎放弃了 Nidhoegger 引用的示例,并且从未在 Swift 中推出过新示例。对于正在寻找如何在 Swift 中最好地解决此问题的任何人,我将SwiftAuthorizationSample放在一起,希望能非常简单地展示如何做到这一点。由于我最初也发现这很令人困惑,并得出结论它比应有的复杂得多,因此我制作了SecureXPC 框架,它可以为这个场景创建服务器XPCMachServer.forBlessedHelperTool()
- 它会根据您已经创建的属性列表自动配置自己SMJobBless
.