"Interação do usuário não é permitida" tentando assinar um aplicativo OSX usando o codesign

Nossa construçã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 segurança chaveiro de desbloqueio imediatamente antes de assinar para desbloquear o chaveiro.Mover a chave de assinatura para o seu próprio chaveiro.Mover a chave de assinatura para o chaveiro de login.Mover a chave de assinatura para o chaveiro do sistema.Definição manual de keychains de lista para apenas o conjunto de chaves que contém a chave.

Em todos os casos, recebo o mesmo erro.

Em uma tentativa de diagnosticar o problema, eu tentei executar o comando "security unlock-keychain" no meu terminal local e descobri que ele não desbloqueia o keychain - se eu olhar no Keychain Access, o símbolo de bloqueio ainda está lá. Este é o caso se eu passo a senha na linha de comando ou se deixo que ela me peça por ela. Desbloquear o mesmo chaveiro usando a GUI solicitará a senha e desbloqueá-lo. Além disso, se eu executar "chave de bloqueio de segurança", euFaz veja o bloqueio de teclas imediatamente após executar o comando. Isso me faz pensar que as chaves de desbloqueio não funcionam de verdade. Eu tenho o mesmo comportamento no Lion (que estamos usando para construir escravos) e no Mavericks (que eu 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 list-keychains é o que não está funcionando. Talvez nem trabalhe. : /

Existe umpergunta semelhante aqui. A solução é interessante - defina "SessionCreate" como true no launchctl. Mas eu não estou construindo no master - meu processo de construção é iniciado a partir do SSH em uma máquina de construção escrava. Talvez haja uma maneira de fazer o que o launchctl está fazendo quando você executa "SessionCreate"?

questionAnswers(16)

yourAnswerToTheQuestion