你如何在沙盒中使用LaunchAgent?我想在我的主应用程序中分发一个无UI的LaunchAgent应用程序包,我可以按需启动它。我想要这个而不是XPC服务的原因是KeepAlive
选项,这将阻止launchd
在空闲时自动终止我的进程。 XPC服务上不存在此选项。
文档说有一个需要复制到~/Library/LaunchAgents
的plist,这显然不可能在沙盒中。是否有某种系统API可以为我复制plist?我见过Apple的SMJobBless示例代码,但似乎是注册特权LaunchDaemon而不是非特权的LaunchAgent。
答案 0 :(得分:4)
您正在寻找的API是SMLoginItemSetEnabled()
。您必须将长期运行的代理程序打包为常规.app软件包,并将其放在Content/Library/LoginItems
的主应用程序包中。
然后,在主应用程序的运行时,您可以使用代理程序包标识符的SMLoginItemSetEnabled()
调用来启用和禁用代理程序。如果您的主应用程序退出,则代理保持活动状态。如果用户注销并重新启动或重新启动,操作系统将在用户重新登录时重新启动您的代理。
更新:正如Dmitry所说,我最初提到的示例不再附带文档,但App Sandbox的另一个Apple sample code project演示了相同的API(请参阅文件{ {1}})。
答案 1 :(得分:1)
文档页面现在不包含示例项目,因此它位于:http://rhult.github.io/articles/sandboxed-launch-on-login/