Notre build automatisé fonctionne sur Jenkins. La construction elle-même s'exécute sur des esclaves, les esclaves étant exécutés via SSH.
J'obtiens une erreur:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
J'ai essayé toutes les suggestions que j'ai vues jusqu'à présent dans d'autres articles ici:
- Utiliser le trousseau de déverrouillage de sécurité immédiatement avant de signer pour déverrouiller le trousseau.
- Déplacement de la clé de signature dans son propre trousseau.
- Déplacement de la clé de signature dans le trousseau de connexion.
- Déplacement de la clé de signature dans le trousseau du système.
- Définition manuelle de list-keychains uniquement sur le trousseau contenant la clé.
Dans tous les cas, j'obtiens la même erreur.
Pour tenter de diagnostiquer le problème, j'ai essayé d'exécuter la commande "security unlock-keychain" sur mon terminal local et j'ai constaté qu'elle ne déverrouille pas réellement le trousseau - si je regarde dans Keychain Access, le symbole de verrouillage est toujours là. C'est le cas que je passe le mot de passe sur la ligne de commande ou que je le laisse me le demander. Le déverrouillage du même trousseau à l'aide de l'interface graphique me demandera le mot de passe, puis le déverrouillera. De plus, si j'exécute "security lock-keychain", je le fais voir la serrure à clé immédiatement après l' exécution de la commande. Cela me fait penser que déverrouiller le trousseau ne fonctionne pas réellement. J'ai le même comportement sur Lion (que nous utilisons pour les esclaves de construction) et Mavericks (sur lequel je développe.)
Ensuite, j'ai essayé d'ajouter -v à toutes les commandes de sécurité:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
"/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.
À partir de là, il semblerait que les porte-clés de liste ne fonctionnent pas. Peut-être que ni l'un ni l'autre ne fonctionne. : /
Il y a une question similaire ici . La solution est intéressante - définissez "SessionCreate" sur true dans launchctl. Mais je ne m'appuie pas sur le maître - mon processus de construction est lancé à partir de SSH sur une machine de construction esclave. Peut-être existe-t-il un moyen en ligne de commande de faire ce que fait launchctl lorsque vous exécutez "SessionCreate"?