2

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

4

2 回答 2

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

于 2017-08-21T10:18:32.040 回答
0

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

于 2021-10-28T08:40:35.477 回答