какао – как заставить приложение macOS без песочницы запускаться при входе в систему?

Я разрабатываю приложение macOS без песочницы, которое не будет выпущено в App Store, и я хочу, чтобы приложение запускалось при входе пользователя в систему.

Текущий метод, который я нашел, заключается в использовании инфраструктуры управления службами и вспомогательного приложения, которое должно подписать это приложение. Ранее допустимым способом был LSSharedFileList, но этот метод не работает в macOS 10.14.

Есть ли способ заставить это простое приложение запускаться при входе в систему?


person Evian    schedule 25.05.2019    source источник
comment
У меня есть код, который использует LSSharedFileList для установки запуска при входе в систему; Я только что протестировал его, и он хорошо работает в моей системе Mojave 10.14.4.   -  person TheNextman    schedule 25.05.2019
comment
Я боролся с этим пару дней, прежде чем нашел этот пакет, который изящно решает эту проблему как для песочницы, так и для приложения без песочницы.   -  person Zack    schedule 06.02.2021


Ответы (1)


Вы можете зарегистрировать любое приложение с помощью launched для запуска в качестве пользовательского агента.

В этом примере приложение с именем «При запуске» будет запускаться всякий раз, когда пользователь входит в систему.

Шаг 1

Вам нужно будет создать файл «launchd.plist», чтобы описать службу. В этом примере вы создаете файл с именем com.yourdomain.onstartup.plist со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.yourdomain.onstartup</string>
    <key>LimitLoadToSessionType</key>
    <string>Aqua</string>
    <key>Program</key>
    <string>/Applications/On Startup.app/Contents/MacOS/On Startup</string>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Ключевым моментом является свойство RunAtLoad, которое указывает launchd запускать процесс при загрузке сеанса пользователя.

(Примечание: вы можете создать этот файл, создав словарь и записав его в виде списка свойств.)

Шаг 2:

Установите этот файл в ~/Library/LaunchAgents. Здесь launchd ищет файлы конфигурации запуска для каждого пользователя.

Шаг 3:

Выполните команду

launchctl bootstrap ~/Library/LaunchAgents/com.yourdomain.onstartup.plist

или просто дождитесь перезагрузки системы.

Команда bootstrap сообщает launchd, что новую службу необходимо зарегистрировать и активировать немедленно, но все файлы в LaunchAgents будут зарегистрированы автоматически при следующем входе пользователя в систему.

Если вам нужно, чтобы ваше приложение работало все время, рассмотрите возможность добавления свойства KeepAlive. И есть около миллиарда других вариантов.

Шаг 4:

Чтобы ваше приложение больше не запускалось при входе в систему, удалите файл com.yourdomain.onstartup.plist.

Если вы установили свойство KeepAlive, вы также захотите вызвать команду launchctl bootout gui/501/com.yourdomain.onstartup, чтобы остановить службу и немедленно отменить ее регистрацию. (Примечание: это убьет ваше приложение.)

Видеть

man launchd.plist

man launchctl

Демоны и службы macOS

person James Bucanek    schedule 25.05.2019