Проблемы с установкой.pkg файла osx через установщик

У меня есть.pkg, который должен быть установлен. Это в основном для обновления моего приложения, имеющего несколько компонентов. Пакет содержит агента, демона и помощника. В Post скрипт запускаю Агента через Sudo $USER launchctl load /Library/LaunchAgent/myApp.plist. Я хочу автоматизировать установку pkg. Для установки этого pkg используется командная строка установщика. Это прекрасно работает, когда я запускаю приложение из Xcode, и pkg установлен точно.

Но когда я не запускаю свое приложение из режима отладки в XCode, и мое приложение установлено, и я пытаюсь установить pkg с помощью вспомогательного инструмента (работающего от имени пользователя root), выполняется команда установщика. Но проблема с загрузкой агента. Агент никогда не запускается.

Но когда я использую команду Su вместо команды SUDO для загрузки агента, который использует
su -l $USER -c "/bin/launchctl load /Library/LaunchAgents/myApp.plist", агент запускается.

Но у меня возникли проблемы с использованием SU, из-за которого установка вспомогательного инструмента впоследствии не удалась.

Итак, 1. почему команда SUDO не работает и не может загрузить агента, когда он запускается из инструмента, работающего от имени пользователя root (этот инструмент был запущен демоном) .

  1. Если я загружаю агента через SU, установка вспомогательного инструмента завершится неудачно.

Обновление:::: Я смог запустить Агент. Но проблема не устранена, потому что не удается установить вспомогательный инструмент, который пытается выполнить аутентификацию. Вот код аутентификации: AuthorizationRef authRef = NULL; AuthorizationItem authItem = { kSMRightBlessPrivilegedHelper, 0, NULL, 0 }; AuthorizationRights authRights = { 1, &authItem }; AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;

OSStatus status=AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess) 
{
    DLog(@"Failed to create AuthorizationRef, return code %i", status);
}
else
{
    result = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)label, authRef, &outError);
    if (!result && error)
    {
        *error = (__bridge NSError *)(outError);
    }
}

0 ответов

Другие вопросы по тегам