2013-06-23 202 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)。