了解 OSX 中的特权帮助工具
Understanding Priviledged Helper Tools in OSX
在我的应用程序中的某个时刻,我需要一个提升的操作。为此,我找到了苹果的 SMJobBless 机制。我已经编写了一个简单的帮助工具并通过 SMJobBless
安装了它。到目前为止,这是有效的。但是我现在不明白的是:安装后如何启动该Helper工具?
通过阅读我找到的几乎所有相关文档,我现在使用 XPC Conenction 来激活辅助工具,然后在使用 SMBlessJob
安装后通过 launchd 按需启动。为此,您需要通过辅助工具的 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 which hopefully shows how to do this pretty simply. Since I also initially found this pretty confusing and concluded it's way more complicated than it ought to be, I made the SecureXPC framework 放在一起,这使得为这种情况创建服务器只是 XPCMachServer.forBlessedHelperTool()
- 它会根据 [=17= 自动配置自己] 列出您必须为 SMJobBless
.
创建的
在我的应用程序中的某个时刻,我需要一个提升的操作。为此,我找到了苹果的 SMJobBless 机制。我已经编写了一个简单的帮助工具并通过 SMJobBless
安装了它。到目前为止,这是有效的。但是我现在不明白的是:安装后如何启动该Helper工具?
通过阅读我找到的几乎所有相关文档,我现在使用 XPC Conenction 来激活辅助工具,然后在使用 SMBlessJob
安装后通过 launchd 按需启动。为此,您需要通过辅助工具的 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 which hopefully shows how to do this pretty simply. Since I also initially found this pretty confusing and concluded it's way more complicated than it ought to be, I made the SecureXPC framework 放在一起,这使得为这种情况创建服务器只是 XPCMachServer.forBlessedHelperTool()
- 它会根据 [=17= 自动配置自己] 列出您必须为 SMJobBless
.