了解 OSX 中的特权帮助程序工具



我需要在我的应用程序中的某个时候进行提升的操作。为此,我找到了苹果SMJobBless机制。我编写了一个简单的辅助工具并通过SMJobBless安装它。到目前为止,这是有效的。但是我现在不明白的是:安装后如何启动该帮助程序工具?

通过阅读我找到的几乎所有记录,我现在使用 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

不幸的是,苹果几乎放弃了Nidhoegger引用的示例,并且从未在Swift中发布过一个新的示例。对于任何寻找如何在 Swift 中最好地解决这个问题的人,我把 SwiftAuthorizationSample 放在一起,希望它能非常简单地展示如何做到这一点。由于我最初也发现这非常令人困惑并得出结论,它比应有的复杂得多,因此我制作了 SecureXPC 框架,这使得为这种情况创建服务器变得XPCMachServer.forBlessedHelperTool()- 它根据您已经必须为SMJobBless创建的属性列表自动配置自己。

最新更新