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

8
我应该如何在沙盒中使用LaunchAgent?我想要将一个没有UI的LaunchAgent应用程序包分发到我的主应用程序中,以便按需启动。 我希望这样做而不是使用XPC服务是因为它具有KeepAlive选项,这将防止launchd在其处于空闲状态时自动终止我的进程。 XPC服务上不存在此选项。

文档说明有一个需要复制到〜/ Library / LaunchAgents的plist文件,但这显然在沙盒中不可能。 是否有某种系统API可以为我复制plist文件? 我看过苹果的SMJobBless示例代码,但似乎那只是用来注册特权LaunchDaemon而不是非特权LaunchAgent。

2个回答

4
你需要的API是SMLoginItemSetEnabled()。你需要将长时间运行的代理程序打包成一个常规的.app包,并将其放入主应用程序的包中的Content/Library/LoginItems目录中。
然后在主应用程序的运行时,您可以使用SMLoginItemSetEnabled()调用代理的包标识符来启用和禁用代理程序。如果您的主应用程序退出,代理程序将保持活动状态。如果用户注销并重新登录或重新启动,则操作系统将在用户重新登录时重新启动您的代理程序。 更新: 如Dmitry所指出,原来提到的示例不再附带文档,但另一个苹果样本代码项目,用于应用沙箱,演示了相同的API(请参见文件NSXPCConnection+LoginItem.m)。

这种方法在2020年和macOS Catalina上是否仍然可用? - EarlGrey

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接