2012-09-24 22 views
36

Avendo un problema dall'aggiornamento a Xcode 4.5 durante l'esecuzione dei test dell'unità tramite la riga di comando. Quello che segue è l'uscita sto vedendo quando provo a eseguire il mio testTest di unità a riga di comando Xcode 4.5

Unknown Device Type. Using UIUserInterfaceIdiomPad based on screen size 
Terminating since there is no workspace. 
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:334: note: Passed tests for architecture 'i386' (GC OFF) 

/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:345: note: Completed tests for architectures 'i386' 

Anche se lo fa dire che i test sono passati e completati, non credo di avere in realtà sono stati eseguiti.

sto usando il seguente comando per eseguire i test xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -SDK iphonesimulator configurazione beta build di debug pulita TEST_AFTER_BUILD = YES

Chiunque ha funzionato nello stesso problema e in grado di offrire una soluzione?

+0

Ho lo stesso problema, e anche altre persone lo fanno: https://github.com/gabriel/gh-unit/issues/96. Nessuna soluzione per ora. –

+1

Posso confermare lo stesso problema. E 'stato lì dalla prima beta, ma dal momento che è "funzionalità non supportata", Apple non ha aiutato con esso. La mia soluzione è scrivere un distinto runner di prova OCUnit/SenTest lanciato usando WaxSim. È parzialmente scritto, ma funziona fino a quel momento, verrà condiviso una volta terminato lo stesso problema – Stew

+0

. la cosa migliore che ho trovato è questa (eppure non ho funzionato) - http://www.gerardcondon.com/blog/2012/09/20/further-jenkins-setup-code-signing/ –

risposta

29

Proprio pensato che avrei dovuto anche condividere quello che ho fatto per una soluzione a questo problema. Ho seguito la soluzione descritta in https://stackoverflow.com/a/10823483/666943 ma ho convertito lo script ruby ​​in shell. Alla fine ho praticamente installato ios-sim tramite homebrew e sostituire il Run Script nel Build Phases del mio bersaglio di prova con il seguente:

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then 
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION" 
    ios-sim launch "$(dirname "$TEST_HOST")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$TEST_HOST" --args -SenTest All "$test_bundle_path" 
    echo "Finished running tests with ios-sim" 
else 
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 
fi 

per avviare il test ora passo nell'argomento RUN_UNIT_TEST_WITH_IOS_SIM=YES esempio

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES 
+3

Viene visualizzato sempre il seguente errore: '[DEBUG] Impossibile avviare la sessione: Error Domain = DTiPhoneSimulatorErrorDomain Code = 2" La sessione di Simulator è scaduta. " UserInfo = 0x7fd323c2a4a0 {NSLocalizedDescription = La sessione del simulatore è scaduta.} ' – fabb

+0

Se questo è per Jenkins come vedo la tua altra domanda era correlata a allora sarà necessario un altro passo per farlo funzionare. Durante l'installazione di Jenkins sul nostro server di build, ha creato il file di avvio in/Library/LaunchDaemons. Quando ho provato a lanciare ios-sim, ho riscontrato lo stesso errore che hai descritto, il problema sembra essere che jenkins non è eseguito come utente che ha effettuato l'accesso. Spostando invece il launchd plist in/Library/LaunchAgents, in modo che la sua esecuzione sia l'utente che ha effettuato il login, questo ha risolto il problema. –

+1

Nono, ho provato questo senza Jenkins per ora. L'ho eseguito da Xcode eseguendo il Test Scheme (proverò anche dalla riga di comando, forse è da lì che viene l'errore). E: ho un server Jenkins e un nodo di compilazione separati. Nella maggior parte dei casi, l'utente 'jenkins' sul nodo di creazione non * ha * effettuato l'accesso. Il server si collega semplicemente tramite SSH. Funzionava perfettamente con Xcode 4.4.1 con questo trucco: http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

9

Ho notato questo problema nelle versioni beta di Xcode 4.5/iOS 6. Ho lavorato su un'unità indipendente che esegue il test su runner per ovviare a questo problema. Funziona compilando il tuo bundle di test unitario, quindi compilando una versione della tua app che esegue automaticamente i test unitari in un ambiente di simulazione.

Lo strumento non è affatto completo, ma le persone sembrano avere questo problema che sto rilasciando lo strumento come è per ora. Si prega di forchetta o commento in modo da poter migliorare lo strumento.

xcodetest: https://github.com/sgleadow/xcodetest

Anche tenere d'occhio su questo radar sulla questione http://openradar.appspot.com/12306879

+0

Posso confermare che la risposta di Stew è stata ciò che mi ha aiutato a far funzionare i test unitari. – Jessedc

+0

Funziona! Ma ho dovuto aggiungere '-arch i386' alle due occorrenze di' xcodebuild' nello script. – fabb

+0

Ciò che non funziona è l'esecuzione di altri test da un sottoprogetto di libreria all'interno dello stesso schema. – fabb

6

Impostazione del iphonesimulator alla versione 5.1 sembra risolvere il problema. Ci sono bug radar riempiti su questo problema.

Questo articolo menziona anche una buona soluzione da seguire:

http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5

+1

Alla fine ho optato per una soluzione simile al collegamento che hai fornito in base alla risposta http://stackoverflow.com/a/10823483/666943. –

+0

Immagino che tu abbia ancora bisogno di patch su "RunPlatformUnitTests" come descritto qui? http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html – fabb

+0

Sì, è necessario anche applicare patch RunPlatformUnitTests. Ne ho uno esemplare qui: https://github.com/victorlima/AutoBuild/blob/master/scripts/RunPlatformUnitTests.patched. Fammi sapere se funziona. –

2

Inoltre c'è un piccolo trucco che può aiutare a eseguire test da riga di comando su iOS6.

In primo luogo, è necessario aggiornare il file principale un po ':: 0 simulatore SDK

sto usando Cedro e questo tweak mi ha aiutato

// Faking up that workspace port 
    CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL); 
    return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate"); 

In secondo luogo, è necessario aggiungere categoria a UIWindow:

@implementation UIWindow (Private) 
- (void)_createContext { 
    // Doing nothing here. Just for crash avoidance 
} 
@end 

Cedar unittest verrà eseguito bene, con un po 'di esecuzione avvertenze, ma, almeno, saranno in grado di eseguire :)

Problemi correlati