macos – 在Mac应用程序沙箱中使用LaunchAgent

你会如何在沙盒中使用 LaunchAgent?我想在我的主应用程序中分发一个无UI的LaunchAgent应用程序包,我可以按需启动它.我希望这个而不是XPC服务的原因是KeepAlive选项,这将阻止launchd在其空闲时自动杀死我的进程. XPC服务上不存在此选项.

文档说有一个plist需要被复制到〜/ Library / LaunchAgents中,这显然不可能在沙盒中.是否有某种系统API可以为我复制plist?我已经看过Apple的SMJobBless示例代码,但似乎是注册特权LaunchDaemon而不是无特权的LaunchAgent.

您正在寻找的API是 SMLoginItemSetEnabled().您必须将长期运行的代理打包为常规.app包并将其放入Content / Library / LoginItems的主应用程序包中.

然后,在主应用程序的运行时,您可以使用SMLoginItemSetEnabled()调用和代理程序包的标识符来启用和禁用代理程序.如果您的主应用程序退出,则代理保持活动状态.如果用户注销并重新启动或重新启动,操作系统将在用户重新登录时重新启动您的代理.

更新:正如Dmitry所说,文档不再附带我最初提到的示例,但另一个Apple sample code project,用于App Sandbox,演示了相同的API(请参阅文件NSXPCConnection LoginItem.m).

相关文章
相关标签/搜索