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


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 corro localmente tiene éxito.

Command

Xcodebuild-nombre DEL proyecto del espacio de trabajo.xcworkspace-scheme BGO_Tests-destination 'platform = iOS Simulator, name = iPhone 5s' - derivedDataPath ./ Construir prueba limpia

2014-08-19 10:46:36.591 xcodebuild [33966:381f] iPhoneSimulator: Tiempo de espera de 120 segundos para >simulador para arrancar, el estado actual es 1.

Falló la prueba: Objetivo de prueba BGO_Tests encontró un error (Tiempo de espera de 120 segundos para que el simulador arranque, el estado actual es 1

Probado con Xcode 6 beta 6

Author: StackRunner, 2014-08-19

5 answers

Nota: los nombres de los dispositivos cambiaron en Xcode 7, por lo que ya no los especifica usando iPhone 5 (9.1 Simulator) sino iPhone 5 (9.1).

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

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

Prelaunching

Llegué a un punto en el que lo que propuse allí ya no funcionaba. Además de hacer los cambios mencionados aquí, es necesario lanzar el simulador xcodebuild está esperando ANTES DE xcodebuild se ejecuta:

# 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>' 

Antiguo post

Este error se solucionó en Xcode 6.3 y superior. Si está experimentando problemas similares en Xcode más reciente, es probable que sea otro error.

Seguimiento de Apple con respecto al Bug ID # 18001199:

El contexto proporcionado por LaunchDaemons no es compatible para ejecutar GUI aplicación. El servicio SSH, y la configuración predeterminada para Jenkins, son ambos implementados como LaunchDaemons. En versiones anteriores de Xcode 5 xcodebuild podría ejecutar pruebas en el simulador de iOS en este contexto, pero eso nunca fue una configuración soportada, y como usted ha señalado que ya no funciona a partir de Xcode 6.

A diferencia de LaunchDaemons, LaunchAgents proporcionan un contexto donde se puede ejecutar Aplicaciones GUI-si el usuario está conectado en el momento, con una ventana servidor / sesión Aqua. Convertir su configuración de Jenkins desde ser un LaunchDaemon a ser un LaunchAgent evitaría el reportado cuestión. También puede utilizar launchd para ejecutar pruebas en el simulador de iOS desde un SSH sesión, ya sea mediante la elaboración de un LaunchAgent y manualmente cargando / iniciando eso, o usando "launchctl submit".

Ok, después de investigar un poco más los comentarios por aquí (muchas gracias a Opal), descubrí que lanzar el esclavo a través de JNLP funciona.

Como muchas personas han mencionado, actualmente no es posible ejecutar la prueba unitaria sobre SSH, por lo que es posible que desee girar hacia el agente JNLP por ahora hasta que Apple lo arregle.


Si se conecta con JNLP todavía no lo resuelve, pruebe la solución mencionada en este comentario .

Es decir: Ejecutar estos en la línea de comandos:

DevToolsSecurity-enable

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

Autorización de seguridadsistema de escritura db.privilegio.taskport is-developer

Véanse las Referencias aquí y aquí.

Recientemente he descubierto que si instala un nuevo versión de Xcode y no lo inicie. El simulador podría empezar de nuevo. Para resolver esto, he tenido que iniciar Xcode manualmente e instalar las herramientas adicionales que solicitó.

 31
Author: Michael Loo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:33:51

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 tendrás que ejecutar:

sudo DevToolsSecurity -enable

Sin embargo, una vez que actualicé a Xcode 6, ahora obtengo una caída infinita al intentar ejecutar pruebas xcodebuild sobre SSH. Continúan funcionando bien siempre y cuando esté conectado a la consola y ejecutándolos desde el teclado.

 5
Author: Tad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-27 12:37:36

Me encontré con el mismo problema. Mi teoría de trabajo es que SSH en OSX se inicia como un LaunchDaemon, y LaunchDaemons no se les permite presentar una interfaz de usuario; Referencia.

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

Desafortunadamente, el esclavo Jenkins luego se instala como un - ya lo has adivinado-LaunchDaemon, lo que lleva al mismo problema de no poder lanzar los ensayos; Referencia.

Resolví este problema moviendo los archivos plist y jar de Jenkins Slave LaunchDaemon en /System/Library/LaunchDaemons a ~/Library/LaunchAgents, y actualizé las rutas dentro del archivo plist.

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

 3
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-18 11:49:59

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

Solución para el tiempo de espera 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 lanzados a través de SSH o Jenkins tienen acceso a los ganchos de accesibilidad en todo el sistema. Para ello se puede modificar la base de datos TCC, según esta síntesis. Se requiere un reinicio 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 ahora está arreglado en Xcode 7.2.1 ("La herramienta de línea de comandos' xcodebuild test ' ya no tardará en esperar al Simulador.aplicación para lanzar")

 1
Author: StackRunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-09 21:47:36

He visto este error antes, una posibilidad es que ya que probablemente descargó la Beta Xcode6 desde Internet (no la appstore ya que aún no está disponible), la máquina en la que está tratando de ejecutarlo mostrará una ventana emergente que le preguntará si realmente desea abrir esta aplicación ya que es desde Internet.

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

Una cosa que puede intentar es compartir la pantalla con la máquina y hacer clic en "Abrir" en ese pop hasta.

Si eso todavía no funciona, intentaría:

  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 iniciar (puede elegir no volver a abrir ninguna aplicación al reiniciar)
 0
Author: Michael Loo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-21 05:19:13