Проблемы с установкой.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 (этот инструмент был запущен демоном) .
- Если я загружаю агента через 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);
}
}