Nossa compilação automatizada está sendo executada no Jenkins. A construção em si está sendo executada em escravos, com os escravos sendo executados via SSH.
Eu recebo um erro:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Eu tentei todas as sugestões que vi até agora em outros posts aqui:
- Usando a segurança unlock-keychain imediatamente antes de assinar para desbloquear o keychain.
- Movendo a chave de assinatura para seu próprio chaveiro.
- Movendo a chave de assinatura para o chaveiro de login.
- Movendo a chave de assinatura para o chaveiro do sistema.
- Definir manualmente chave-de-lista apenas para o chaveiro que contém a chave.
Em todos os casos, recebo o mesmo erro.
Na tentativa de diagnosticar o problema, tentei executar o comando "security unlock-keychain" no meu terminal local e descobri que ele realmente não desbloqueia o chaveiro - se eu procurar no Keychain Access, o símbolo de bloqueio ainda está lá. Esse é o caso, se eu passo a senha na linha de comando ou deixo que ela me solicite. Desbloquear o mesmo chaveiro usando a GUI solicitará a senha e a desbloqueará. Além disso, se eu executar "segurança lock-chaveiro", eu fazer ver o bloqueio de teclado imediatamente após a execução do comando. Isso me faz pensar que as chaves de desbloqueio não funcionam realmente. Eu experimento o mesmo comportamento no Lion (que estamos usando para os escravos de construção) e no Mavericks (no qual estou desenvolvendo).
Em seguida, tentei adicionar -v a todos os comandos de segurança:
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.
A partir disso, parece que a lista de chaveiros é o que não está funcionando. Talvez nem funcione. : /
Há uma pergunta semelhante aqui . A solução é interessante - defina "SessionCreate" como true no launchctl. Mas não estou desenvolvendo o mestre - meu processo de criação é iniciado a partir do SSH em uma máquina de criação escrava. Talvez exista uma maneira da linha de comando de fazer o que o launchctl está fazendo quando você executa "SessionCreate"?