web-dev-qa-db-fra.com

Existe-t-il un moyen de supprimer l'invite d'autorisation des instances de ligne de commande d'Instruments (XCode)?

J'utilise actuellement Instruments via un script bash pour lancer l'interface de ligne de commande afin de démarrer les exécutions du plug-in Automation.

Avec la version 4.2, cela fonctionnait assez bien. Cependant, avec la mise à niveau vers Xcode 4.3, un utilisateur autorisé me demande maintenant d'analyser d'autres processus. Aucun utilisateur n'est jamais réellement authentifié, même si les informations d'identification correctes sont accordées. Je reçois l'erreur suivante:

Failed to authorize rights (0x20) with status: -60007.
2012-02-27 19:30:37.232 instruments[54151:1c03] Failed to connect to local pid watcher     service: (os/kern) failure

Même en cas d'échec de l'authentification, le plug-in Automation s'exécute. Toutefois, mon script doit obliger une baby-sitter physique à saisir les informations d'identification, ce qui, à bien des égards, annule l'objectif de ces exécutions en ligne de commande. Est-il possible d'ajouter les détails de l'utilisateur comme arguments? Ou y a-t-il un autre moyen de sauter cette invite sans avoir besoin d'une personne à la clé?

- EDIT -

Cette boîte de dialogue d'autorisation apparaît lorsque vous essayez d'exécuter des tests UIAutomation à partir de l'interface graphique pour la première fois.

enter image description here

Classé dans radar rdar: // 10945962 .

- EDIT -

Une fois que la boîte de dialogue d'autorisation a été traitée dans l'interface graphique, les invites cessent d'apparaître sur la ligne de commande. Ce type de solution de rechange ne semble toutefois pas être une «réponse» valable.

28
Darc

Voici une commande merveilleuse qui peut fonctionner pour vous:

security unlock-keychain -p [password] "${HOME}/Library/Keychains/login.keychain"

C'est le moyen en ligne de commande d'accéder à un trousseau sur le Mac. Je ne l'ai pas testé avec Automation, mais c'est ainsi que j'ai intégré mes versions iOS à Jenkins.

( Remplacez [mot de passe] par le mot de passe )

12
R. Michael Rogers

D'accord, je crois que je l'ai fait fonctionner. 

Voici quelques informations supplémentaires sur la procédure de suppression de autorisation de la ligne de commande xcode Invite

Ce que j'ai fait était le suivant: 

  • Mark utilisateur jenkins en tant qu'administrateur (malheureusement, il semble qu'il n'y ait pas d'autre moyen atm)
  • Aller à/etc/authorisation
  • recherche de clé system.privilige.taskport
  • changer la valeur de allow-root en true

    <key>system.privilege.taskport</key>
    <dict>
        <key>allow-root</key>
        <false/> // change to -> <true>
        <key>class</key>
        <string>user</string>
        <key>comment</key>
        <string>Used by task_for_pid(...).
        ...
    </dict>
    

Je peux maintenant utiliser Jenkins pour exécuter mes tests UIAutomation via un script de ligne de commande.

18
Alexander

Ajoutant à la réponse d'Alexander , j'ai constaté que pour Mavericks, en raison de la manière dont les autorisations sont traitées ( source ), vous devriez procéder comme suit:

Sudo security authorizationdb write system.privilege.taskport allow

J'exécute des tests fonctionnels de courgettes via un travail Jenkins sur une machine virtuelle VMWare. L'esclave ne pouvait pas lancer correctement le simulateur et restait bloqué sur l'écran de démarrage, probablement à cause d'autorisations incorrectes. Cela m'a aidé à résoudre ce problème, j'espère que cela aidera les autres.

9
Jean-Étienne

L'utilisateur sur lequel votre script s'exécute doit être autorisé à utiliser les outils de développement. Vous pouvez le faire de deux manières:

  • Ajoutez l'utilisateur au groupe _developer: Sudo dscl . append /Groups/_developer GroupMembership scriptusername

  • Utiliser l'outil de ligne de commande DevToolsSecurity

N'oubliez pas que pour que les instruments UIAutomation fonctionnent correctement, l'utilisateur à qui vous appelez Instruments doit également être un utilisateur pouvant démarrer un serveur de fenêtres (c'est-à-dire exécuter l'interface utilisateur) - et doit être connecté à un serveur de fenêtres. quand UIAutomation s'exécute.

Ces deux choses sont deux des quatre ou cinq secrets de l’utilisation de UIAutomation avec Jenkins.

5
quellish

J'ai partiellement résolu ce problème. Je lance les instruments en ligne de commande et je dispose d’une autorisation d’autorisation dans l’interface graphique (une fois par session) + dans la console (à chaque fois que je lance des instruments):

Instruments: Instruments wants permission to analyze other processes.
Type your password to allow this.
Name ([my-username]):
Password:

Failed to authorize rights (0x20) with status: -60007.
2012-02-28 10:04:19.607 instruments[60398:1203] Failed to connect to
local pid watcher service: (os/kern) failure

J'ai comparé le fichier/etc/authorisation avant et après la mise à niveau vers xCode 4.3. Apple a remplacé deux clés:

<key>com.Apple.dt.instruments.process.analysis</key>
<key>com.Apple.dt.instruments.process.kill</key>

avec

<key>com.Apple.instruments.process.analysis</key>

J'ai édité/etc/autorisation, ajouté les clés manquantes au-dessous du nouveau et le problème de la console est résolu. Malheureusement, l'invite graphique est toujours là.

Mising clés:

<key>com.Apple.dt.instruments.process.analysis</key>
<dict>
    <key>allow-root</key>
    <true/>
    <key>class</key>
    <string>user</string>
    <key>comment</key>
    <string>Rights for Instruments</string>
    <key>group</key>
    <string>admin</string>
    <key>shared</key>
    <true/>
    <key>timeout</key>
    <integer>36000</integer>
    </dict>
<key>com.Apple.dt.instruments.process.kill</key>
<dict>
    <key>allow-root</key>
    <true/>
    <key>class</key>
    <string>user</string>
    <key>comment</key>
    <string>Rights for Instruments</string>
    <key>group</key>
    <string>admin</string>
    <key>shared</key>
    <true/>
    <key>timeout</key>
    <integer>5</integer>
</dict>

J'espère que cela vous indiquera de résoudre tout le problème

4
tj-at-alan

J'ai aussi fait face à ce problème sur El Capitan. J'ai trouvé cet article très utile https://www.dssw.co.uk/reference/authorization-rights/ . Sur cette base, j'ai changé les droits suivants afin de surmonter ce problème:

system.privilege.taskport
system.privilege.taskport.debug
system.privilege.taskport.safe
com.Apple.dt.instruments.process.analysis
com.Apple.dt.instruments.process.kill
Sudo security authorize -u [username]

a travaillé pour moi.

1
Ron D.

C'est la solution qui a fonctionné pour moi:

<key>system.privilege.taskport</key>
<dict>
<key>allow-root</key>
<false/> 
<key>class</key>
<string>user</string> // change to -> allow
<key>comment</key>
<string>Used by task_for_pid(...).
...
</dict>
1
amol-c

J’ai également essayé la sécurité unlock-keychain et modifié le fichier/etc/authorisation. DevToolsSecurity est activé, mais aucun d’entre eux ne fonctionne. mot de passe, ensuite, lorsque je relance le script d'instruments, il ne nécessite plus de mot de passe!

0
Yanhui Li

Dans Xcode - si vous ouvrez un organiseur (Xcode-> Fenêtre-> Organiseur)

Ensuite, sélectionnez votre machine sous appareils -> 'Activer le mode développeur'

Cela devrait supprimer le besoin d'invites avec des instruments.

0
Ronald Palmer