Мне нужен способ добавить приложение к элементам входа из сценария postflight, который запускается как часть моего установщика. Надо работать на 10.5+. Желательно, чтобы это работало в сценарии bash. Моему приложению уже требуются права администратора.
Подход, который я нашел здесь: https://stackoverflow.com/questions/4912212/mac-os-login-items-with-arguments казалось, на правильном пути (см. ниже) ... но не сработало, когда я попробовал его в командной строке, и я не уверен, как установить его для всех пользователей или мне нужно добавить логику, чтобы проверить, он уже добавлен в элементы автозагрузки перед вызовом этого кода.
#!/bin/bash
/usr/bin/osascript -e "tell application \"System Events\" to make new login item with properties { path: \"$1\", hidden:false } at end"
Подозреваю, что мог бы тоже что-нибудь сделать с launchd. Но я не уверен, какой подход лучше всего подходит для совместимости между версиями.
Если вы не против немного почитать, я бы посоветовал начать с Техническая записка Apple TN2083: Демоны и агенты.
Я не тестировал его, но считаю, что проще всего делать то, что вы хотите, через launchd
агент. По сути, это означает, что plist
файл в /Library/LaunchAgents
. Приятным побочным преимуществом этого является то, что вы можете перезаписывать один и тот же файл столько раз, сколько захотите, и вы не должны получать несколько экземпляров вашего элемента (для каждого пользователя).
Что-то вроде:
#!/bin/sh
cat > /Library/LaunchAgents/com.serverfault.myapp.plist << EOT
<?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.serverfault.myapp</string>
<key>ProgramArguments</key>
<array>
<string>/Library/MyApp/myapp.app/Contents/MacOS/myapp</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOT
Другая возможность - это глобальный элемент входа. Из этой технической заметки, упомянутой выше, я сделал вывод:
System Events
обработать. [Так, возможно, это больше не работает надежно с версии 10.5?]Я считаю, что много приложений (до launchd
в 10.5) используется для управления loginwindow.plist
файл напрямую. К сожалению, многие из них сделали это неправильно - я не могу сказать вам, сколько полу-XML-полу-двоичных-полностью-сломанных loginwindow.plist
файлы, которые я видел.
Деление - это очень подходящее место.
В следующем сообщении stackoverflow есть некоторые дополнительные сведения о добавлении элементов входа в систему из bash: