2013-06-23 161 views
7

您将如何在沙箱内使用LaunchAgent?我想在我的主应用程序中分发一个无需UI的LaunchAgent应用程序包,我可以根据需要启动它。我想要这个而不是一个XPC服务的原因是KeepAlive选项,这将阻止launchd在闲置时自动终止进程。 XPC服务上不存在此选项。在Mac应用沙箱中使用LaunchAgent

该文档说,有一个plist需要复制到~/Library/LaunchAgents,这在沙箱内显然是不可能的。是否有某种系统API可以为我处理复制plist?我已经看到了Apple的SMJobBless示例代码,但似乎是注册了特权的LaunchDaemon,而不是非特权的LaunchAgent。

回答

4

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

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

更新:正如梅德指出,该文件不再自带的样品我原来提到,但另一对于App Sandbox,Apple sample code project演示了相同的API(请参阅文件NSXPCConnection+LoginItem.m)。