2013-06-23 2 views
7

Как вы используете LaunchAgent внутри песочницы? Я хочу распространять пакет приложений LaunchAgent с интерфейсом UI в моем основном приложении, который я могу запустить по требованию. Причина, по которой я хочу это вместо службы XPC, - это опция KeepAlive, которая предотвратит автоматический отказ launchd от моего процесса при его простоях. Этот вариант не существует в службах XPC.Использование LaunchAgent в песочнице Mac app

В документации говорится, что имеется пластинка, которую необходимо скопировать в ~/Library/LaunchAgents, и это явно невозможно в песочнице. Есть ли какой-то системный API, который обрабатывал бы для меня копию? Я видел пример кода Apple SMJobBless, но похоже, что это для регистрации привилегированного LaunchDaemon, а не непривилегированного LaunchAgent.

ответ

4

API, который вы ищите, является SMLoginItemSetEnabled(). Вам придется упаковать свой долгосрочный агент в виде обычного пакета .app и поместить его в комплект вашего основного приложения по адресу Content/Library/LoginItems.

Затем во время выполнения основного приложения вы можете использовать вызов SMLoginItemSetEnabled() с идентификатором пакета агента для включения и выключения вашего агента. Если ваше основное приложение завершается, агент остается в живых. Если пользователь выходит из системы и обратно или перезагружается, операционная система будет перезапустить ваш агент, когда пользователь снова входит в

Обновление:. Как отмечает Дмитрий, документация больше не поставляется с образцом, я изначально не говорил, а другая Apple sample code project, для приложения Sandbox, демонстрирует тот же API (см. Файл NSXPCConnection+LoginItem.m).

Смежные вопросы