Eu tenho um .pkg que precisa ser instalado. Isso é basicamente para atualizar meu aplicativo com vários componentes. O pkg contém Agent, Daemon e um ajudante. Em Post script estou iniciando o Agente através do Sudo $ USER launchctl load /Library/LaunchAgent/myApp.plist. Eu quero automatizar a instalação do pacote. A linha de comando do instalador está sendo usada para instalar este pacote. Isso funciona bem quando eu executar o aplicativo do Xcode e pkg está instalado corretamente.
Mas quando não estou executando meu aplicativo do modo de depuração no Xcode e meu aplicativo é instalado e tento instalar o pacote com a ajuda da ferramenta auxiliar (em execução como root), o comando do instalador está em execução. Mas o problema é com o carregamento do agente. O agente nunca é iniciado.
Mas quando eu uso o comando Su em vez do comando SUDO para carregar o Agent que está usando o
su -l $ USER -c "/ bin / launchctl load /Library/LaunchAgents/myApp.plist",
o agente é iniciado.
Mas estou tendo problemas com o uso da SU em que a instalação da ferramenta auxiliar falha posteriormente.
Então 1. por que o comando SUDO está falhando e não é capaz de carregar o agente quando ele está sendo executado a partir de uma ferramenta em execução como root (essa ferramenta foi iniciada pelo daemon).
Atualizar :::: Eu fui capaz de iniciar o agente. Mas o problema persiste porque a instalação da ferramenta Helper falha, o que tenta autenticar. Aqui está o código de autenticação: AuthorizationRef authRef = NULL; AuthorizationItem authItem = {kSMRightBlessPrivilegedHelper, 0, NULL, 0}; AuthorizationRights authRights = {1, & authItem}; AutorizaçãoFlags 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);
}
}