2012-05-15 21 views
8

Tengo una aplicación de iOS, y quiero ponerlo en integración continua. La estrategia que estoy usando para hacer eso es tratar de ejecutar las pruebas desde la línea de comando.No se puede ejecutar UIAutomationTest desde la línea de comandos

Estoy tratando de hacerlo utilizando el siguiente script:

TRACETEMPLATE="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate" 
instruments -t $TRACETEMPLATE build/Release-iphonesimulator/MyApp.app -e UIACSCRIPT "UnitTests/SomeTest.js" 

SomeTest.js es un archivo javascript simple que se puede ejecutar en el interior Instrumentación Xcode y funciona. Construyo mi aplicación usando:

xcodebuild -alltargets -sdk iphonesimulator5.1 

y esto genera la MyApp.app. Puedo ejecutar la aplicación desde Xcode en el simulador muy bien, sin embargo, cuando trato de correr por los instrumentos, aparece un cuadro diciendo que hay un error desconocido y en la línea de comandos que se imprime:

2012-05-15 15:32:59.928 instruments[17548:1d03] Recording cancelled : At least one target failed to launch; aborting run 
Instruments Trace Error : Failed to start trace. 

¿Alguien me puede dar alguna ayuda/sugerencia sobre lo que podría estar pasando y cómo puedo solucionarlo?

Además, siempre se abre el simulador de iPad? ¿Puedo hacer que abra cualquier simulador que quiera?

+0

Tengo exactamente el mismo problema y tampoco puedo resolverlo :( – Roger

+0

No he podido encontrar una solución hasta el momento. Trataré de preguntar en los foros de Apple para ver si se me ocurre algo. algo afuera, te lo haré saber. – Rafael

Respuesta

6

Estaba recibiendo el mismo error y casi me sacó el pelo tratando de resolverlo. Los mensajes de error son completamente inútiles.

Lo que terminó siendo el problema para mí fue el archivo .app al que estaba apuntando. Una vez que encontré el archivo .app "correcto" que estaba profundamente oculto en la carpeta del simulador 5.1, finalmente pude ejecutar las pruebas de UIAutomation desde la línea de comandos con Xcode 4.3.

La ruta de acceso al .app que trabajó para mí:

~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/ 

Este es el comando completo que estoy usando para ejecutar pruebas UIAutomation desde la línea de comandos con Xcode 4.3:

instruments -t /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/{string-of-numbers-and-letters}/MyApp.app/ -e UIASCRIPT /Path/To/TestFile.js 

Espero que esto ayude a otra persona, ya que la documentación disponible para esto es extremadamente deficiente.

actualización

nota de que al Xcode 4.5.2, la ubicación de la plantilla de automatización ha cambiado desde que en mi respuesta original:

/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate 
+0

Gracias, funcionó! No sé si puedo poner esto en un servidor ci (no creo que mi Makefile actualice la aplicación allí, lo probaré más tarde y ver si funciona ....) – Rafael

+0

Hola @ spotdog13, estoy recibiendo este error cuando lo ejecuto - 'Error: La aplicación de destino parece haber muerto Instrumentos Traza Completa' – Legolas

+1

@Legolas, me parece la versión de .app al que apunta no es la versión más reciente de su aplicación. ¿Se ha asegurado de que no haya varias carpetas en ~/Library/Application \ Support/iPhone \ Simulator/5.1/Applications/{string -of-numbers-and-letters} ?? Si hay más de una carpeta "{string-of-numbers-and-letters}" en referencia a la ruta anterior, pruebe con otra y vea si funciona. Supongo que intentas ejecutar una versión anterior de tu aplicación. Avísame si eso ayuda. – DiscDev

0

lo siento, mi Inglés es muy malo. ¿Cuál es la forma más fácil de ejecutar este script desde Teamtsity? Cada conjunto: los números y las letras son diferentes. No es la manera más fácil:

  1. limpia el simulador antes del montaje
  2. encontrar la carpeta con el programa, y ​​contiene estos números y letras, escritas en la variable.
  3. Esta variable, como escribir el script.

Tal vez hay una manera más fácil de tomar de estos números?

1

Las rutas para la invocación de la línea de comando de UIAutomation han cambiado ligeramente en los últimos años.He escrito algunas secuencias de comandos bash shell que funcionan juntas y que pueden iniciar su archivo de prueba UIAutomation de manera que funcione con Xcode 4.4.1.

ver este GIST: https://gist.github.com/3605692#comments

En pocas palabras, el comando de teclado termina siendo:

instruments -t $INSTRUMENTS_TEMPLATE $APP_PATH -e UIASCRIPT $SCRIPT_PATH -e UIARESULTSPATH $RESULTS_PATH

Mis guiones muestran las sustituciones de variables necesarias. La otra ventaja es que las aplicaciones de simulador de iOS a menudo han cambiado el GUID como parte de su camino. Mi script los encontrará, por lo que no es necesario codificar el GUID temporal en sus compilaciones/scripts/invocaciones de línea de comando.

+1

¡Gracias por los guiones de shell! – kovpas

6

La ubicación correcta de la Automation.tracetemplate, a partir de Xcode 4.5.2, es /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate

+0

Ojalá pudiera darte 10 votos. ¿Por qué lo siguen cambiando? –

0

La configuración de generación debe ser de depuración de lanzamiento. Esa fue la razón del error en mi caso. Puede cambiar la Configuración de compilación en 'Editar esquemas' y eligiendo la pestaña Perfil. Verifique que la pestaña de compilación también esté en modo de depuración.

0

Hice el comando ps para ver qué procesos se están ejecutando. Encontré que los instrumentos todavía estaban funcionando. Luego hice killall instruments y eso mató el proceso de los instrumentos. Luego hice mi comando de instrumentos y funcionó perfecto después de eso.

Cuestiones relacionadas