"La interacción del usuario no está permitida" al tratar de firmar una aplicación OSX utilizando codesign

Nuestra compilación automatizada se está ejecutando en Jenkins. La construcción en sí misma se ejecuta en esclavos, y los esclavos se ejecutan a través de SSH.

Me sale un error:

00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.

He intentado todas las sugerencias que he visto hasta ahora en otras publicaciones aquí:

Usando el llavero de desbloqueo de seguridad inmediatamente antes de firmar para desbloquear el llavero.Mover la llave de firma hacia fuera en su propio llavero.Mover la clave de firma en el llavero de inicio de sesión.Mover la clave de firma en el llavero del sistema.Configuración manual de los llaveros de lista solo para el llavero que contiene la clave.

En todos los casos, me sale el mismo error.

En un intento de diagnosticar el problema, intenté ejecutar el comando "security unlock-keychain" en mi terminal local y descubrí que en realidad no desbloquea el llavero. Si veo el acceso a Keychain, el símbolo de bloqueo sigue ahí. Este es el caso si paso la contraseña en la línea de comandos o si dejo que me la pida. Desbloquear el mismo llavero usando la GUI me pedirá la contraseña y luego la desbloquearé. Además, si ejecuto "llavero de seguridad",hacer ver el bloqueo de teclas inmediatamente después de ejecutar el comando. Esto me hace pensar que el llavero de desbloqueo en realidad no funciona. Experimento el mismo comportamiento en Lion (que estamos usando para construir esclavos) y en Mavericks (que estoy desarrollando).

A continuación, intenté agregar -v a todos los comandos de seguridad:

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.

Por esto, parece que la lista de llaveros es lo que no funciona. Tal vez ninguno trabaje. : /

Hay unpregunta similar aquí. La solución es interesante: establezca "SessionCreate" en true en launchctl. Pero no estoy construyendo sobre el maestro, mi proceso de compilación se inicia desde SSH en una máquina de compilación esclava. Tal vez hay una forma de línea de comandos para hacer lo que launchctl está haciendo cuando ejecuta "SessionCreate"?

Respuestas a la pregunta(16)

Su respuesta a la pregunta