ssh jenkins ios-simulator xcode6 xcodebuild

Tiempo de espera al ejecutar las pruebas de xcodebuild en Xcode 6 a través de SSH



jenkins ios-simulator (5)

Parece que tengo problemas con la integración de Xcode6 con jenkins, actualmente tengo esta configuración y trabajo con Xcode 5.

Con xcode 6 ejecutándose remotamente a través de SSH, el tiempo de espera del simulador, cuando lo ejecuto localmente tiene éxito.

Mando

xcodebuild -workspace PROJECTNAME.xcworkspace -scheme BGO_Tests -destination ''platform = iOS Simulator, name = iPhone 5s'' -derivedDataPath ./Build clean test

2014-08-19 10: 46: 36.591 xcodebuild [33966: 381f] iPhoneSimulator: se agotó el tiempo de espera 120 segundos para iniciar el simulador, el estado actual es 1.

Prueba fallida: el objetivo de prueba BGO_Testó un error (Tiempo de espera agotado esperando 120 segundos para que arranque el simulador, el estado actual es 1

Probado con Xcode 6 beta 6 reciente


Finalmente logré encontrar una buena solución simple. JNLP estaba causando numerosos problemas con nuestro servidor jenkins.

Solución para el tiempo de espera de SSH a través de https://corner.squareup.com/2015/07/ios-build-infrastructure.html

"Mavericks (10.9) y Yosemite (10.10) determinan si un proceso puede acceder a los ganchos de accesibilidad a través de la paternidad del proceso de acceso. Al poner launchd en la lista de procesos permitidos, los procesos iniciados a través de SSH o Jenkins tienen acceso a los ganchos de accesibilidad a través del Para hacerlo, puede modificar la base de datos de TCC, según este principio. Se requiere reiniciar para que el cambio surta efecto ".

#!/bin/bash # This will add lauchd to the list of allowed processes for accessibility access sudo sqlite3 /Library/Application/ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access VALUES(''kTCCServiceAccessibility'',''/sbin/launchd'',1,1,1,NULL)" # This outputs the rows in the TCC database sudo sqlite3 /Library/Application/ Support/com.apple.TCC/TCC.db ''select * from access'' echo "Restart is required for these changes to take effect"

Actualización 8/02/2016 Esto está ahora resuelto en Xcode 7.2.1 ("Herramienta de línea de comandos ''xcodebuild test'' ya no tendrá que esperar a que se ejecute Simulator.app")


He visto este error antes, una posibilidad es que ya que probablemente descargó el Xcode6 Beta de Internet (no la tienda de aplicaciones porque aún no está disponible), la máquina en la que está intentando ejecutar mostrará una ventana emergente preguntándole si realmente desea abrir esta aplicación como si fuera de internet.

Lo mismo sucederá cuando xcodebuild intente iniciar la aplicación del simulador de iPhone.

Una cosa que quizás quieras probar es compartir la pantalla con la máquina y hacer clic en "Abrir" en esa ventana emergente.

Si eso todavía no funciona, trataría de:

  1. Restablecer el contenido y la configuración del simulador
  2. Reinicie la máquina y asegúrese de que no se esté ejecutando ningún simulador al iniciarse (puede elegir no volver a abrir ninguna aplicación al reiniciar)

Me encontré con el mismo problema. Mi teoría de trabajo es que SSH en OSX se inicia como LaunchDaemon, y LaunchDaemons no puede presentar una UI; Reference .

Pude solucionar el problema utilizando Java Web Start para ejecutar el esclavo Jenkins. Luego instalé el esclavo Jenkins como un servicio de lanzamiento.

Lamentablemente, el esclavo de Jenkins se instala a sí mismo como, lo habrá adivinado, LaunchDaemon, lo que provoca exactamente el mismo problema de no poder iniciar las pruebas; Reference .

Trabajé alrededor de ese problema moviendo los archivos Jenkins Slave LaunchDaemon plist y jar en /System/Library/LaunchDaemons en ~/Library/LaunchAgents , y actualicé las rutas dentro del archivo plist.

Eso finalmente me permitió ejecutar pruebas XCode6 (Beta6) en un esclavo OSX jenkins.


Terminé resolviendo esto en Xcode 5 haciendo los pasos aquí , esencialmente ejecutando:

sudo security authorizationdb write system.privilege.taskport allow

Esto eliminará una clase de estas ventanas emergentes de autenticación. También necesitarás ejecutar:

sudo DevToolsSecurity -enable

Sin embargo, una vez que actualicé a Xcode 6, ahora tengo un bloqueo infinito cuando intento ejecutar pruebas de xcodebuild a través de SSH. Siguen funcionando bien siempre y cuando haya iniciado sesión en la consola y los ejecute desde el teclado.


Nota: los nombres de los dispositivos han cambiado en Xcode 7, por lo que ya no los especifica utilizando iPhone 5 (9.1 Simulator) sino más bien iPhone 5 (9.1) .

Use xcrun instruments -s para obtener la lista actual de dispositivos y luego puede prelanzarla usando:

xcrun instruments -w "iPhone 5 (9.1)" || echo "(Pre)Launched the simulator."

Prelanzamiento

Llegué a un punto en el que lo que propuse allí ya no funcionaba. Además de realizar los cambios mencionados aquí, debe iniciar el simulador que xcodebuild espera ANTES de ejecutar xcodebuild:

# First get the UDID you need xcrun instruments -s # Then launch it open -a "iOS Simulator" --args -CurrentDeviceUDID <sim device UDID> # and wait some time.... sleep 5 # Then launch your unit tests xcodebuild [...] -destination ''platform=iOS Simulator,name=<device name matching the UDID>''

Publicación anterior

Este error se corrigió en Xcode 6.3 y superior. Si tiene problemas similares en Xcode más reciente, es probable que se trate de otro error.

Seguimiento de Apple con respecto al Bug ID # 18001199:

El contexto proporcionado por LaunchDaemons no es compatible para ejecutar aplicaciones de GUI. El servicio SSH y la configuración predeterminada para 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 nunca fue una configuración compatible, y como habrás notado, ya no funciona a partir de Xcode 6.

A diferencia de LaunchDaemons, LaunchAgents proporciona un contexto donde puede ejecutar aplicaciones GUI, si el usuario está conectado en ese momento, con un servidor de ventana / sesión Aqua. Convirtiendo 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 SSH, ya sea creando un LaunchAgent y cargando / comenzando manualmente, o usando "launchctl submit".

Bien, después de investigar más sobre los comentarios aquí (muchas gracias a Opal ), descubrí que el lanzamiento del esclavo a través de JNLP funciona.

Como mucha gente mencionó, actualmente no es posible ejecutar la prueba unitaria sobre SSH, por lo que es posible que desee recurrir al agente JNLP por ahora hasta que Apple lo corrija.

Si conectarte con JNLP aún no lo resuelve, prueba la solución que se menciona en este comment .

es decir: ejecútelos en la línea de comando:

DevToolsSecurity-habilitado

sudo dscl. -append / Groups / _developer GroupMembership "user-that-runs-the-sim"

autorización de seguridadd write system.privilege.taskport is-developer

Ver referencias here y comment .

Recientemente descubrí que si instalas una nueva versión de Xcode y no la ejecutas. El simulador podría comenzar a agotar el tiempo de nuevo. Para resolver esto, tuve que iniciar manualmente Xcode e instalar las herramientas adicionales que solicitó.