Приложение Sandboxed Mac не всегда запускается автоматически с использованием SMLoginItemSetEnabled() - программирование
Подтвердить что ты не робот

Приложение Sandboxed Mac не всегда запускается автоматически с использованием SMLoginItemSetEnabled()

У меня очень странная проблема с песочным Mac-приложением, которое я разрабатываю. Одним из требований является то, что пользователь должен иметь возможность запускать приложение при запуске системы. Для этого я использую SMLoginItemSetEnabled(), как описано в http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/.

Когда пользователь запускает приложение в первый раз и включает этот параметр, я вижу, что запись добавляется к launchctll, используя список launchctl. Когда я перезагружаю систему, приложение не запускается. Более странным является тот факт, что запись, найденная с использованием списка launchctl, исчезла. Однако аналогичная запись по-прежнему доступна в файле /private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist с ключом Disabled is false.

Когда я запускаю приложение вручную и снова устанавливаю параметр для запуска автоматически, запись снова доступна в списке launchctl. Когда я перезагружаю систему, приложение запускается автоматически. Заключение, по какой-то причине SMLoginItemSetEnabled() работает только во второй раз, когда я запускаю приложение. Поэтому он похож на эту проблему: https://stackoverflow.com/info/16354295/sandbox-app-with-loginitems-only-work-after-second-app-launch. Однако решение не предоставляется.

https://stackoverflow.com/info/16354295/sandbox-app-with-loginitems-only-work-after-second-app-launch

4b9b3361

Ответ 1

Если вы похожи на меня, у вас, вероятно, были дополнительные копии (созданные Xcode и т.д.), которые, похоже, путают LaunchServices.

Я написал сообщение об этом здесь: Элементы входа в macOS 10.11 и новее

Но в короткой версии используйте lsregister -dump, чтобы найти все копии, о которых знает LaunchServices, удалить их, а затем использовать lsregister -kill to reset базу данных LaunchServices, когда вы закончите.

Ответ 2

Лучший способ запуска приложений с песочницей для Mac при входе в систему. Следуйте этому учебнику.

Это может показаться немного выше, но он отлично работает!