Программно запускается при запуске 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");
}