2013-01-23 5 views
6

Jak można wykryć awarię za pomocą Xcodebuild bezpośrednio z bash? kod wyjścia ma zawsze wartość 0 niezależnie. Zdaję sobie sprawę, że istnieje faktura "NIEPOWODZONA" lub "SUCCEEDED", ale czy nie ma bardziej eleganckiego sposobu?OSX/Bash - wykrywanie awarii kompilacji

Ponadto, czasami używam "make" (szczególnie w moich kompilacjach opartych na Qt). Czy istnieje sposób na wykrycie błędu make z skryptu budowania?

+0

Czy spojrzał na http://stackoverflow.com/questions/7363459/how-to-get-the-return-value-of-xcodebuild/10808467#10808467? –

+1

, więc xcodebuild .... || exit 1 wyjdzie ze skryptu z kodem wyjścia 1 po awarii? czy nie jest to zależne od xcodebuilda, który faktycznie podaje kod wyjścia> 0 w przypadku niepowodzenia? myślałem, że tego nie robi. – JasonGenX

Odpowiedz

1

Może to zależy od wersji Xcode lub ewentualnie w jaki sposób się nie powiedzie. To dostaję, kiedy sprawdzam $? po niektórych plikach include nie można znaleźć:

[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 zawsze zwraca 0, nawet jeśli kompilacja się nie powiedzie. Do wykrywania błędów, można użyć skryptu tak:

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 

I sprawdzeniu, że BUILD FAILED ** ** nie zostanie wydrukowany, gdy uruchomiony xcodebuild z opcją archiwum, więc wydaje się, że łańcuch jest szukać "Poniższe polecenia kompilacji nie powiodły się".

+0

dzięki za to. Próbowałem również słowo liczba na prostu ciąg "błąd" i wydaje się wystarczające. (chyba że wszystkie twoje klasy lub coś ma na sobie słowo "błąd") – kevinl