2012-05-15 11 views
8

Ho un'applicazione iOS e desidero inserirla in un'integrazione continua. La strategia che sto usando per farlo è provare a eseguire i test dalla riga di comando.Impossibile eseguire UIAutomationTest dalla riga di comando

sto cercando di farlo utilizzando il seguente 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 è un semplice file javascript che posso correre in Strumentazione all'interno Xcode e funziona. Costruisco la mia applicazione utilizzando:

xcodebuild -alltargets -sdk iphonesimulator5.1 

e questo genera MyApp.app. Posso eseguire l'applicazione da Xcode nel simulatore bene, tuttavia, quando provo a fare funzionare dagli strumenti, ottengo una scatola dicendo che c'è un errore sconosciuto e nella riga di comando che stampe:

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. 

Qualcuno può darmi qualche aiuto/suggerimenti su cosa potrebbe accadere e come posso risolvere questo problema?

Inoltre, apre sempre il simulatore iPad? Posso fare in modo che apra qualsiasi simulatore che voglio?

+0

Ho esattamente lo stesso problema e non riesco a risolverlo :( – Roger

+0

Non sono riuscito a trovare una soluzione fino ad ora. Proverò a chiedere sui forum Apple per vedere se escogitano qualcosa. fuori qualcosa, ti farò sapere .. – Rafael

risposta

6

Stavo ricevendo lo stesso errore e ho quasi tirato fuori i miei capelli cercando di risolverlo. I messaggi di errore sono completamente inutili.

Quello che è stato il problema per me è stato il file .app che stavo indicando. Una volta trovato il file "giusto" .app che era profondamente sepolto nella cartella 5.1 Simulator, sono stato finalmente in grado di eseguire i test di UIAutomation dalla riga di comando con Xcode 4.3.

Il percorso del .app che ha funzionato per me:

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

Ecco il comando completo che sto usando per eseguire i test UIAutomation dalla linea di comando 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 

Spero che questo aiuti qualcun altro, dato che la documentazione disponibile per questo è estremamente carente.

Aggiornamento

Nota che a partire da Xcode 4.5.2, il modello di posizione di automazione è cambiato da quella sulla mia risposta originale:

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

Grazie, ha funzionato! Non so se posso mettere questo in un server ci però (non credo che il mio Makefile aggiornerà l'app lì, proverò più tardi e vedi se funziona ....) – Rafael

+0

Ehi @ spotdog13, sto ricevendo questo errore quando lo eseguo - 'Fail: l'applicazione di destinazione sembra essere morta Instruments Trace Complete' – Legolas

+1

@Legolas, mi suona come la versione della .app che stai indicando non è la versione più recente della tua app. Ti sei assicurato che non ci siano più cartelle in ~/Libreria/Applicazione \ Supporto/iPhone \ Simulator/5.1/Applicazioni/{stringa -di-numeri-e-lettere} ?? Se c'è più di una cartella "{string-of-numbers-and-letters}" in riferimento al percorso sopra, provane un altro e verifica se funziona. La mia ipotesi è che tu stia cercando di eseguire una versione precedente della tua app. Fammi sapere se questo aiuta. – DiscDev

0

dispiace, il mio inglese è pessimo. Come il modo più semplice per eseguire questo script da Teamtsity? Ogni assemblea - i numeri e le lettere sono diversi. Non il modo più semplice:

  1. pulito il simulatore prima del montaggio
  2. trovare la cartella con il programma, e contiene questi numeri e lettere, scritte nella variabile.
  3. Questa variabile, ad esempio la scrittura dello script.

Forse c'è un modo più facile da prendere da questi numeri?

1

I percorsi per l'invocazione della riga di comando di UIAutomation sono leggermente cambiati negli ultimi due anni.Ho scritto alcuni script di shell bash che funzionano insieme e che possono avviare il file di test di UIAutomation in un modo che funzioni con Xcode 4.4.1.

Vai a questa sostanza: https://gist.github.com/3605692#comments

In poche parole, il comando chiave finisce per essere:

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

miei script mostra le sostituzioni delle variabili necessarie. L'altro vantaggio è che le app del simulatore iOS cambiano spesso GUID come parte del loro percorso. Il mio script li troverà, quindi non devi codificare il GUID temporaneo nelle tue build/script/richiami della riga di comando.

+1

Grazie per gli script di shell! – kovpas

6

la correttezza posizione del Automation.tracetemplate, come di Xcode 4.5.2, è /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate

+0

Vorrei poterti dare 10 voti. Perché continuano a cambiarlo? –

0

La configurazione di generazione di debug dovrebbe essere quello di uscita. Questo è stato il motivo dell'errore nel mio caso. È possibile modificare la configurazione della build in "Modifica schemi" e scegliendo la scheda Profilo. Verifica che la scheda di compilazione sia anche in modalità di debug.

0

Ho eseguito il comando ps per vedere quali processi sono in esecuzione. Ho trovato che gli strumenti erano ancora in funzione. Ho quindi fatto killall instruments e questo ha ucciso il processo degli strumenti. Poi ho fatto il comando degli strumenti e dopo ha funzionato perfettamente.