какао - как заставить приложение macOS без песочницы запускаться при входе в систему? - PullRequest
0 голосов
/ 25 мая 2019

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

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

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

1 Ответ

0 голосов
/ 25 мая 2019

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

...