Программно запускается при запуске Mac OS X?
Как программно установить пакет приложений в Mac OS X для запуска, когда пользователь входит в систему?
В принципе, эквивалент раздела реестра HKCU\Software\Microsoft\Windows\CurrentVersion\Run
в Windows.
Ответы
Ответ 1
Вы можете добавить приложение к пользователю "Элементы входа" (в разделе "Системные настройки = > Учетные записи = [пользователь]), или вы можете добавить launchd в пользовательскую папку ~/Library/LaunchAgents
(см. man launchd.plist
). Используйте ~/Library/LaunchDaemons/
, если ваше приложение не имеет пользовательского интерфейса пользователя. Как отмечают другие, launchdd дает вам большой контроль при запуске приложения, что происходит, если приложение завершает работу или выходит из строя и т.д., И наиболее подходит для приложений типа" демон" (без нашего интерфейса).
Первым вариантом (Элементы входа) можно управлять программно (ссылка Gordon).
Ответ 2
"Правильный" метод заключается в создании LaunchAgent для процессов, которые вы хотите запустить при входе в систему, которые могут иметь пользовательский интерфейс и LaunchDaemon для тех, которые должны быть чистыми фоновыми процессами.
В установщике снимите свой слой в нужную папку, как для пользователя, так и для всех пользователей или для системы. Причина, по которой этот метод превосходит, заключается в том, что вы можете использовать launchd для управления запуском вашего процесса, включая встроенную возможность убедиться, что он продолжает работать, даже если он сбой или был убит пользователем.
Ответ 3
Ниже приведен рабочий пример.
Создать файл
~/Library/LaunchAgents/my.everydaytasks.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>my.everydaytasks</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/EverydayTasks.app/Contents/MacOS/EverydayTasks</string>
</array>
<key>ProcessType</key>
<string>Interactive</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
Посмотрите оригинальное сообщение, которое помогло мне сделать этот пример:
https://superuser.com/a/229792/43997
Чтобы проверить, вам нужно запустить это в терминале
launchctl load -w ~/Library/LaunchAgents/my.everydaytasks.plist
Чтобы выгрузить
launchctl unload -w ~/Library/LaunchAgents/my.everydaytasks.plist
См. также
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html
Другим способом добавления приложения в стартап можно воспользоваться "Элементы входа". См. Этот примерный проект о том, как его реализовать:
https://github.com/justin/Shared-File-List-Example
Ответ 4
Требуется бросить это здесь для всех, кто использует Qt/С++. Qt делает его очень простым в использовании plists через класс QSettings. Проверьте этот фрагмент кода из образца фиктивного приложения.
void MainWindow::readPlist()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
QVariant value = settings.value("mykey");
QMessageBox::information(this, "Your Value", value.toString());
}
void MainWindow::addPlistEntry()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
settings.setValue("mykey", "myvalue");
}
void MainWindow::removePlistEntry()
{
QSettings settings(appPlistPath, QSettings::NativeFormat);
settings.remove("mykey");
}