ind*_*gie 7 macos cocoa xpc launchd launch-agent
你如何在沙盒中使用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示例代码项目(针对 App Sandbox)演示了相同的 API(请参阅文件NSXPCConnection+LoginItem.m)。
2023 年 12 月更新:当前文档显示SMLoginItemSetEnabled 已弃用。推荐的替代品是SMAppService,它具有注册和取消注册方法。引用那里的内容:
在 macOS 13 及更高版本中,使用 SMAppService 注册和控制 LoginItems、LaunchAgents 和 LaunchDaemons 作为应用程序的帮助程序可执行文件。
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |