ios ssh jenkins xcodebuild codesign

ios - Xcode, Codesign Error de Jenkins/SSH: "La interacción del usuario no está permitida"



xcodebuild (6)

Estoy intentando ejecutar un xcodebuild automatizado en Jenkins, pero estoy corriendo en el error

La interacción del usuario no está permitida. El comando / usr / bin / codesign falló con el código de salida 1

Ya he hecho referencia a "La interacción del usuario no está permitida" al intentar firmar una aplicación OSX utilizando codesign y otros subprocesos similares, pero ninguna de las soluciones parece remediar adecuadamente el error.

Esto es lo que ya he probado:

  • He permitido que todos los elementos accedan al llavero, y he agregado específicamente codeign a la lista de "siempre permitir" (como se hace aquí https://stackoverflow.com/a/22637896 )

  • He configurado el llavero para que no se bloquee automáticamente con un tiempo de espera, tanto a través de la configuración de Acceso a Llaves, como a través del comando

    security set-keychain-settings -t 3600 -l <KEYCHAIN>

  • He intentado llamar

    codesign --sign <CODE SIGN IDENTITY> --force ...

    antes de que el proyecto se compile (más específicamente, esta solución https://stackoverflow.com/a/20208104 ), y aunque esto construye con éxito el proyecto, no creo que la creación de códigos antes de compilar sea correcta o confiable. (Edición: esto también falló cuando se ejecutó desde jenkins)

Aquí están los comandos que estoy ejecutando:

security unlock-keychain -p <PASSWORD> <KEYCHAIN> xcodebuild -scheme <SCHEME> -workspace <WORKSPACE> -derivedDataPath <BUILD DIRECTORY> -configuration <CONFIGURATION> "CONFIGURATION_BUILD_DIR=<BUILD DIRECTORY>" "CODE_SIGN_IDENTITY=<CODE SIGN ID>" "PROVISIONING_PROFILE=<PROVISIONING PROFILE>" clean build

Algo interesante que se debe tener en cuenta es que la creación del proyecto en la máquina funciona con los comandos anteriores, pero el intento de ejecutar los mismos comandos sobre ssh (y jenkins) provoca el error.

¡Gracias de antemano por tu ayuda!


Apple no es compatible con SSH para ejecutar la compilación automatizada, ya que no tienen headless , por lo que la ejecución a través de SSH podría ser el problema aquí:

El contexto proporcionado por LaunchDaemons no es compatible para ejecutar aplicaciones GUI. El servicio SSH y la configuración predeterminada de Jenkins se implementan como LaunchDaemons. En versiones anteriores de Xcode 5, xcodebuild podía ejecutar pruebas en el simulador de iOS en este contexto, pero eso nunca fue una configuración compatible, y como ha notado, ya no funciona a partir de Xcode 6.

A diferencia de los LaunchDaemons, los LaunchAgents proporcionan un contexto en el que puede ejecutar aplicaciones GUI, si el usuario ha iniciado sesión en ese momento, con un servidor de Windows / sesión de Aqua. Convertir su configuración de Jenkins de ser un LaunchDaemon a ser un LaunchAgent evitaría el problema informado. También puede usar launchd para ejecutar pruebas en el simulador de iOS desde una sesión de SSH, ya sea creando un LaunchAgent y cargándolo / iniciándolo manualmente, o usando "launchctl submit".

¿Has intentado usar el agente web en su lugar?


He pasado por este problema con Jenkins Xcode plugin.

Acabo de marcar ¿ Desbloquear llavero?

en

Xcode - Opciones de firma de código y llavero de OS X

para hacer correr mi compilación


Instale el complemento XCode aquí: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin

Elija la opción para desbloquear el llavero y suministrar la ruta al llavero. por ejemplo, $ {HOME} /Library/Keychains/login.keychain

Asegúrese de establecer la variable de entorno $ HOME. Por experiencia, es más fácil tener el inicio de sesión de la máquina como usuario, como lo haría un desarrollador.


La compilación automatizada (Jenkins w / remote SSH), que usa productsign, funcionó bien hasta que actualizamos la caja de compilación de Yosemite a Sierra.

productsign [4065: 51711] Error al configurar la firma RSA: la interacción del usuario no está permitida. (-25308)

Probamos diferentes soluciones encontradas en SO, pero ninguna funcionó.

Finalmente, lo arreglé haciendo lo siguiente:

  1. Abre Llavero, ve a Preferencias
  2. Haga clic en ''Restablecer mi llavero predeterminado''
  3. Aparece el mensaje "operación no permitida" o similar.
    • El error no tiene sentido ya que el usuario es administrador
    • el llavero de inicio de sesión se elimina, pero no se vuelve a crear.
  4. Cerrar sesión e iniciar sesión de nuevo
    • aparece un nuevo llavero de inicio de sesión
    • productsign funciona de nuevo (a través de la construcción automatizada)

Tenga en cuenta que nuestro certificado ''Developer ID Installer: ACME, Inc (12345ABCDE)'' está en el llavero del sistema.


Ponga sus llaves en el llavero del sistema en lugar de Iniciar sesión / iCloud / Elementos locales.


Sólo en caso de que alguien se lo haya perdido. La respuesta en la pregunta vinculada resuelve el problema. Básicamente necesitas ejecutar security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" . Ejecuto esto antes de que la compilación y el codesign tenga éxito.