Autorizar um desenvolvedor não administrador no Xcode / Mac OS

109

Eu uso uma conta de usuário padrão para minhas tarefas diárias no Mac OS. Desde a atualização para o Snow Leopard, sou solicitado a fazer o seguinte quando um programa é executado a partir do Xcode:

"Digite o nome e a senha de um usuário no grupo 'Ferramentas do Desenvolvedor' para permitir que o Acesso às Ferramentas do Desenvolvedor faça alterações"

Embora eu saiba o nome de usuário / senha do administrador, isso é irritante (embora só seja necessário uma vez por login).

O acesso às ferramentas do desenvolvedor está solicitando direitos para "system.privilege.taskport.debug" do aplicativo gdb-i386-apple-darwin.

Qual é a melhor maneira de contornar isso?

Andrew Cain
fonte

Respostas:

134

Você precisa adicionar seu nome de usuário OS X ao _developergrupo. Veja as postagens neste tópico para mais informações. O seguinte comando deve resolver o problema:

sudo dscl . append /Groups/_developer GroupMembership <username>
Ned Deily
fonte
1
Essa solução funcionou para mim por cerca de 10 minutos e, então, por algum motivo, começou a pedir meu nome de usuário / senha novamente. Tentei digitá-lo no Terminal novamente, mas ele não responde mais.
jowie
Isso funciona para mim e não tenho nenhum problema até agora. Anotado apenas para referência.
eonil
9
Esta solução não funcionou para mim até que eu adicionei -u <name-of-account-with-root-access>as opções. Então, meu comando completo foidscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Você deve considerar o uso de 'mesclar' em vez de 'anexar' se adicionar esta linha a um script de integração contínua. Merge não o adicionará se já existir. Veja 'man dscl' para mais detalhes.
Russ Van Bert,
1
Isso funcionou para me adicionar ao grupo, mas somente depois que usei a sugestão do @Kheldar para fazer o su em uma conta root primeiro.
b01
24

Finalmente, consegui me livrar dele usando o DevToolsSecurity -enableTerminal. Obrigado a @joar_at_work !

Para sua informação : estou no Xcode 4.3 e pressionei o botão desativar quando ele foi iniciado pela primeira vez, não pergunte por quê, apenas presuma que meu cachorro me fez fazer isso :)

gordo
fonte
2
1 por mencionar DevToolsSecurity. Eu não tinha ideia de que tal ferramenta existisse. Eu tinha o problema oposto, eu queria fazer desativá-lo novamente e graças a esta ferramenta que eu finalmente foi capaz de :) Apenas substituído -enablecom -disablee que funciona como esperado!
Mecki
1
Este comando parece não ter efeito algum. O Xcode 4.3 ainda requer autenticação de alguém no grupo _developer, independentemente de -enable ou -disable ser usado.
wcochran
Só para esclarecer, esta etapa é, pelo menos em alguns casos, além de adicionar o usuário ao grupo _developer comdscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
Marmoy
Não parece funcionar no macOS "El Capitan" com XCode 7.3. A solução de @ Kheldar funcionou para mim.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
fonte
5
Na minha humilde opinião, essa resposta realmente poderia se beneficiar de uma explicação um pouco mais detalhada sobre o que ela faz. Não é que eu não goste de digitar sudo rm -rf / no meu sistema, mas você entendeu. : D
Kheldar
8

Você deve se adicionar ao grupo Ferramentas do Desenvolvedor. A sintaxe geral para adicionar um usuário a um grupo no OS X é a seguinte:

sudo dscl . append /Groups/<group> GroupMembership <username>

Acredito que o nome do grupo DevTools seja _developer.

Phoebus
fonte
3

A solução de Ned Deily funciona perfeitamente bem, desde que seu usuário tenha permissão para isso sudo.

Se ele não for, você pode suusar uma conta de administrador e usar a dele dscl . append /Groups/_developer GroupMembership $user, onde $ user é o nome de usuário.

No entanto, pensei erroneamente que não, porque digitei erroneamente o nome do usuário no comando e ele falhou silenciosamente.

Portanto, após inserir este comando, você deve revisá-lo. Isso verificará se $ user está em $ group, onde as variáveis ​​representam respectivamente o nome do usuário e o nome do grupo.

dsmemberutil checkmembership -U $user -G $group

Este comando imprimirá a mensagem user is not a member of the groupou user is a member of the group.

Kheldar
fonte
2
Obrigado! Isso funcionou para mim! Os comandos que funcionaram no OS X Mavericks foram dscl . append /Groups/_developer GroupMembership username edsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode
2

Resposta sugerida por @Stacy Simpson:

Estamos lutando com o problema descrito nestes tópicos e nenhuma das resoluções parece funcionar:

Como sou novo no SO, não posso postar em nenhum dos tópicos. (O primeiro já está fechado e discordo do raciocínio de localização ...)

De qualquer forma, criamos uma solução alternativa usando AppleScript que pode interessar a todos. O script a seguir deve ser executado de forma assíncrona antes de iniciar o teste automatizado:

osascript <script name> <password> &

Aqui está o script:

on run argv
    # Delay for 10 seconds as this script runs asynchronously to the automation process and is kicked off first.
    delay 10

    # Inspect all running processes
    tell application "System Events"
        set ProcessList to name of every process
        # Determine if authentication is being requested
        if "SecurityAgent" is in ProcessList then
            # Bring this dialogue to the front
            tell application "SecurityAgent" to activate
            # Enter provided password
            keystroke item 1 of argv
            keystroke return
        end if
    end tell
end run

Provavelmente não é muito seguro, mas é a melhor solução que criamos para permitir que os testes sejam executados sem a necessidade de intervenção do usuário.

Com sorte, posso obter pontos suficientes para postar a resposta; ou alguém pode desproteger esta pergunta. Saudações.

Martin Turjak
fonte
2

Aqui está uma solução melhor do
Mac OS X deseja usar as chaves do sistema ao compilar o projeto

  1. Abra o Acesso às Chaves.
  2. No canto superior esquerdo, desbloqueie o chaveiro (se estiver bloqueado).
  3. Escolha o chaveiro do sistema no canto superior esquerdo.
  4. Encontre seu certificado de distribuição e clique no triângulo de divulgação.
  5. Clique duas vezes em 'Chave privada' no seu certificado de distribuição.
  6. No pop-up, vá para a guia Controle de acesso.
  7. Selecione 'Permitir que todos os aplicativos acessem este item'.
  8. Salve as alterações.
  9. Feche todas as janelas.
  10. Execute o aplicativo.
Raj
fonte
1

Estou no Snow Leopard e este não funcionou muito bem para mim. Mas o seguinte procedimento funcionou:

  1. Primeiro adicionou outra conta com privilégios de administrador marcando "Permitir que o usuário administre este computador" em Contas, por exemplo, uma conta com teste de nome de usuário
  2. Conectado à conta de teste
  3. Lancei o Xcode, compilei e executei meu projeto do iPhone. Tudo bem, nenhum erro foi gerado relacionado às permissões
  4. Saiu da conta de teste
  5. Conectado com outra conta com privilégios de administrador
  6. Retirou os privilégios de administrador da conta de teste removendo a marca de "Permitir que o usuário administre este computador" em Contas
  7. Conectado novamente à conta de teste
  8. Excluído o diretório do projeto do iPhone e novamente retirado do repositório (no meu caso, svn)
  9. Lançou o Xcode, compilou e executou o projeto. Não recebi nenhum erro e o aplicativo funcionou bem no simulador do iPhone.
Naveen Kansara
fonte
0

Depois de executar:

sudo dscl . append /Groups/_developer GroupMembership <username>

de acordo com a resposta acima, você ainda pode ser solicitado a inserir sua própria senha:

Precisamos da autorização de um usuário administrador para executar o depurador. Isso acontecerá apenas uma vez por sessão de login.

O que realmente significa é qualquer usuário _developer groupmember, portanto, apenas seu usuário / senha não-administrador funcionará aqui, mas para se livrar dela completamente (sem solicitações após uma reinicialização), você também precisará executar:

sudo DevToolsSecurity -enable

(executá-lo com sudo como um usuário administrador / como root fará com que você possa fazer isso remotamente sem um prompt de senha gui)

timofei7
fonte