La nostra build automatizzata è in esecuzione su Jenkins. La build stessa è in esecuzione su slave, con gli slave eseguiti tramite SSH.
Ottengo un errore:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Ho provato tutti i suggerimenti che ho visto finora in altri post qui:
- Utilizzo del portachiavi di sblocco di sicurezza immediatamente prima della firma per sbloccare il portachiavi.
- Spostare la chiave di accesso nel proprio portachiavi.
- Spostamento della chiave di firma nel portachiavi di accesso.
- Spostamento della chiave di firma nel portachiavi di sistema.
- Impostazione manuale dei portachiavi dell'elenco solo sul portachiavi che contiene la chiave.
In tutti i casi, ottengo lo stesso errore.
Nel tentativo di diagnosticare il problema, ho provato a eseguire il comando "security unlock-keychain" sul mio terminale locale e ho scoperto che in realtà non sblocca il portachiavi - se guardo in Keychain Access, il simbolo del lucchetto è ancora lì. Questo è il caso se passo la password dalla riga di comando o se lascio che me lo richieda. Sbloccare lo stesso portachiavi utilizzando la GUI mi chiederà la password e quindi lo sbloccerà. Inoltre, se corro "sicurezza lock-portachiavi", io faccio vedere il blocco tasti immediatamente dopo l'esecuzione del comando. Questo mi fa pensare che il keychain di sblocco non funzioni davvero. Provo lo stesso comportamento su Lion (che stiamo usando per gli schiavi build) e Mavericks (su cui sto sviluppando.)
Successivamente, ho provato ad aggiungere -v a tutti i comandi di sicurezza:
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.
Da ciò, sembrerebbe che i portachiavi dell'elenco siano ciò che non funziona. Forse nessuno dei due funziona. : /
C'è una domanda simile qui . La soluzione è interessante: imposta "SessionCreate" su true in launchctl. Ma non sto costruendo sul master - il mio processo di compilazione viene avviato da SSH su una macchina di compilazione slave. Forse c'è un modo da riga di comando per fare ciò che launchctl sta facendo quando si esegue "SessionCreate"?