Вы можете зарегистрировать любое приложение с помощью 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 Демоны и службы