2013-01-23 7 views
6

Utilizzando Xcodebuild direttamente da bash, come si può rilevare un errore? il codice di uscita è sempre 0 indipendentemente. Mi rendo conto che c'è un output testuale "FALLITO" o "SUCCESSO", ma non c'è un modo più elegante?Errore di generazione del rilevamento di OSX/Bash

Inoltre, a volte uso "make" (specialmente con le mie build basate su Qt). C'è un modo per rilevare make ha fallito dallo script di build?

+0

Hai guardato http://stackoverflow.com/questions/7363459/how-to-get-the-return-value-of-xcodebuild/10808467#10808467? –

+1

quindi xcodebuild .... || exit 1 uscirebbe dallo script con il codice di uscita 1 in caso di errore? non dipende da xcodebuild che in realtà fornisce un codice di uscita> 0 quando fallisce? ho pensato che non lo facesse – JasonGenX

risposta

1

Forse dipende dalla versione di Xcode o forse da come non riesce. Questo è ciò che ottengo quando controllo $? dopo alcuni file non sono stati trovati:

[email protected]:~/Source/icanvas/iCanvas-project (release/icanvas-1.9 %) $ xcodebuild 
... 
/Users/davidb/Source/icanvas/iCanvas-project/iCanvas-target/iPhone/ConversationViewController.m:21:9: fatal error: 'CanvasKit/CKActionSheetWithBlocks.h' file not found 
#import "CanvasKit/CKActionSheetWithBlocks.h" 
     ^
1 error generated. 
... 
** BUILD FAILED ** 
... 
(5 failures) 
[email protected]:~/Source/icanvas/iCanvas-project (release/icanvas-1.9 %) $ echo $? 
65 
6

xcodebuild restituisce sempre 0 anche quando la compilazione fallisce. Per rilevare gli errori, è possibile utilizzare uno script come questo:

build_errors_file=build_errors.log 

# Pipe errors to file 
xcodebuild 2>$build_errors_file 

errors=`grep -wc "The following build commands failed" $build_errors_file` 
if [ "$errors" != "0" ] 
then 
    echo "BUILD FAILED. Error Log:" 
    cat $build_errors_file 
    rm $build_errors_file 
    exit 1 
fi 
rm $build_errors_file 

# ... continue 

ho verificato che ** ** generazione non riuscita non verrà stampato durante l'esecuzione xcodebuild con l'opzione archivio, così sembra che la stringa da cercare è 'I seguenti comandi di compilazione non sono riusciti'.

+0

grazie per questo. Ho anche provato il conteggio delle parole solo sulla stringa "error" e sembra essere sufficiente. (a meno che tutte le tue classi o qualcosa non contengano la parola "errore") – kevinl

Problemi correlati