Autoriser un développeur non-administrateur dans Xcode / Mac OS

109

J'utilise un compte utilisateur standard pour mes tâches quotidiennes sous Mac OS. Depuis la mise à niveau vers Snow Leopard, je suis invité à effectuer les opérations suivantes lorsqu'un programme est exécuté à partir de Xcode:

"Saisissez le nom et le mot de passe d'un utilisateur dans le groupe" Outils de développement "pour autoriser l'accès aux outils de développement à apporter des modifications"

Bien que je connaisse le nom d'utilisateur / mot de passe de l'administrateur, c'est ennuyeux (bien que requis une seule fois par connexion).

L'accès aux outils de développement demande les droits sur "system.privilege.taskport.debug" depuis l'application gdb-i386-apple-darwin.

Quelle est la meilleure façon de contourner cela?

Andrew Cain
la source

Réponses:

134

Vous devez ajouter votre nom d'utilisateur OS X au _developergroupe. Voir les articles de ce fil pour plus d'informations. La commande suivante devrait faire l'affaire:

sudo dscl . append /Groups/_developer GroupMembership <username>
Ned Deily
la source
1
Cette solution a fonctionné pour moi pendant environ 10 minutes, puis pour une raison quelconque, elle a recommencé à me demander mon nom d'utilisateur / mot de passe. J'ai essayé de le taper à nouveau dans le terminal, mais il ne répond plus.
jowie
Cela fonctionne pour moi et je n'ai aucun problème jusqu'à présent. Noté juste pour référence.
eonil
9
Cette solution n'a pas fonctionné pour moi jusqu'à ce que j'aie ajouté -u <name-of-account-with-root-access>aux options. Donc, ma commande complète étaitdscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
dsjoerg
1
Vous devriez envisager d'utiliser 'merge' au lieu de 'append' si vous ajoutez cette ligne à un script d'intégration continue. Merge ne l'ajoutera pas s'il existe déjà. Voir 'man dscl' pour plus de détails.
Russ Van Bert
1
Cela a fonctionné pour m'ajouter au groupe, mais seulement après avoir utilisé la suggestion @Kheldar pour accéder d'abord à un compte root.
b01
24

Enfin, j'ai pu m'en débarrasser en utilisant DevToolsSecurity -enablesur Terminal. Merci à @joar_at_work !

FYI : je suis sur Xcode 4.3 et j'ai appuyé sur le bouton de désactivation lors de son premier lancement, ne demandez pas pourquoi, supposez simplement que mon chien m'a fait le faire :)

chunkyguy
la source
2
+1 pour avoir mentionné DevToolsSecurity. Je n'avais aucune idée qu'un tel outil existe. J'ai eu le problème inverse, je voulais le désactiver à nouveau et grâce à cet outil j'ai finalement pu :) Juste remplacé -enablepar -disableet cela fonctionne comme prévu!
Mecki
1
Cette commande semble n'avoir aucun effet. Xcode 4.3 requiert toujours l'authentification de quelqu'un sur le groupe _developer, que -enable ou -disable soit utilisé.
wcochran
Juste pour clarifier, cette étape est, au moins dans certains cas, en plus d'ajouter l'utilisateur au groupe dscl -u <root-account> . append /Groups/_developer GroupMembership <my-account>
_developer
Ne semble pas fonctionner sur macOS "El Capitan" avec XCode 7.3. La solution de @ Kheldar a fonctionné pour moi.
Laryx Decidua
9
$ dseditgroup -o edit -u <adminusername> -t user -a <developerusername> _developer
cdespinosa
la source
5
À mon humble avis, cette réponse pourrait vraiment bénéficier d'un peu plus d'explications sur ce qu'elle fait. Ce n'est pas que je n'aime pas taper sudo rm -rf / sur mon système, mais vous comprenez mon point. : D
Kheldar
8

Vous devez vous ajouter au groupe Outils de développement. La syntaxe générale pour ajouter un utilisateur à un groupe sous OS X est la suivante:

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

Je crois que le nom du groupe DevTools est _developer.

phoebus
la source
3

La solution de Ned Deily fonctionne parfaitement bien, à condition que votre utilisateur y soit autorisé sudo.

S'il ne l'est pas, vous pouvez suaccéder à un compte administrateur, puis utiliser le sien dscl . append /Groups/_developer GroupMembership $user, où $ user est le nom d'utilisateur.

Cependant, j'ai pensé à tort que ce n'était pas le cas car j'ai mal tapé le nom de l'utilisateur dans la commande et cela échoue silencieusement.

Par conséquent, après avoir entré cette commande, vous devez la vérifier. Cela vérifiera si $ user est dans $ group, où les variables représentent respectivement le nom d'utilisateur et le nom du groupe.

dsmemberutil checkmembership -U $user -G $group

Cette commande imprimera le message user is not a member of the groupou user is a member of the group.

Kheldar
la source
2
Merci! Cela a fonctionné pour moi! Les commandes qui ont fonctionné pour OS X Mavericks étaient dscl . append /Groups/_developer GroupMembership username etdsmemberutil checkmembership -U "username goes here" -G "group goes here"
MoralCode
2

Réponse suggérée par @Stacy Simpson:

Nous sommes aux prises avec le problème décrit dans ces fils et aucune des résolutions ne semble fonctionner:

Comme je suis nouveau dans SO, je ne peux publier dans aucun fil. (Le premier est en fait fermé et je ne suis pas d'accord avec le raisonnement de localisation ...)

Quoi qu'il en soit, nous avons créé une solution de contournement à l'aide d'AppleScript qui pourrait intéresser les gens. Le script ci-dessous doit être exécuté de manière asynchrone avant de lancer votre test automatisé:

osascript <script name> <password> &

Voici le 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

Probablement pas très sécurisé, mais c'est la meilleure solution que nous ayons trouvée pour permettre aux tests de s'exécuter sans nécessiter l'intervention de l'utilisateur.

J'espère que je pourrai obtenir suffisamment de points pour publier la réponse; ou quelqu'un peut déprotéger cette question. Cordialement.

Martin Turjak
la source
2

Voici une meilleure solution de
Mac OS X qui souhaite utiliser le trousseau système lors de la compilation du projet

  1. Ouvrez l'accès au trousseau.
  2. Dans le coin supérieur gauche, déverrouillez le trousseau (s'il est verrouillé).
  3. Choisissez le trousseau système dans le coin supérieur gauche.
  4. Trouvez votre certificat de distribution et cliquez sur le triangle de divulgation.
  5. Double-cliquez sur «Clé privée» sous votre certificat de distribution.
  6. Dans la fenêtre contextuelle, accédez à l'onglet Contrôle d'accès.
  7. Sélectionnez «Autoriser toutes les applications à accéder à cet élément».
  8. Enregistrez les modifications.
  9. Fermez toutes les fenêtres.
  10. Exécutez l'application.
Raj
la source
1

Je suis sur Snow Leopard et celui-ci n'a pas vraiment fonctionné pour moi. Mais la procédure suivante a fonctionné:

  1. J'ai d'abord ajouté un autre compte avec des privilèges d'administrateur en cochant «Autoriser l'utilisateur à administrer cet ordinateur» sous Comptes, par exemple un compte avec un nom d'utilisateur test de
  2. Connecté au test compte de
  3. Lancement de Xcode, compilation et exécution de mon projet iPhone. Tout va bien, aucune erreur liée aux autorisations n'a été générée
  4. Déconnecté du compte de test
  5. Connecté avec un autre compte disposant de privilèges d'administrateur
  6. Suppression des privilèges d'administrateur du compte de test en supprimant la coche de «Autoriser l'utilisateur à administrer cet ordinateur» sous Comptes
  7. Reconnecté au compte de test
  8. Supprimé le répertoire du projet iPhone et à nouveau extrait du référentiel (dans mon cas svn)
  9. Lancement de Xcode, compilation et exécution du projet. Je n'ai eu aucune erreur et l'application a bien fonctionné dans le simulateur iPhone.
Naveen Kansara
la source
0

Après avoir couru:

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

selon la réponse ci-dessus, vous pouvez toujours être invité à entrer votre propre mot de passe:

Nous avons besoin de l'autorisation d'un utilisateur administrateur pour exécuter le débogueur. Cela ne se produira qu'une seule fois par session de connexion.

Ce que cela signifie vraiment est tout _developer utilisateur groupmember afin que votre utilisateur / mot de passe non-admin fonctionnera ici , mais pour se débarrasser complètement (sans invites après un redémarrage) , vous aurez également besoin de courir:

sudo DevToolsSecurity -enable

(l'exécuter avec sudo en tant qu'utilisateur admin / en tant que root vous permettra de le faire à distance sans invite de mot de passe gui)

timofei7
la source