23 Stimmen

Ist es normal, dass Xcode nicht erkennt, wenn eine Pre-Action fehlgeschlagen ist?

Ich verwende Xcode 4 und ich habe eine Preaction zu der laufen. Schema, ein Bash-Skript, aber es scheint, dass Xcode den Exit-Status des Skripts ignoriert und immer ausgeführt wird, auch wenn der Exit-Code nicht Null ist.

Ist das normal? Welche Alternativen habe ich, um einen benutzerdefinierten Schritt hinzuzufügen, der fehlschlagen kann?

Aktualisierung: Ich habe auch versucht exit 1 für Post-Action für Build, aber mit dem gleichen Ergebnis, immer ohne Rückmeldung ausgeführt werden.

Wie kann ich einen benutzerdefinierten Schritt erstellen, der den Build als fehlgeschlagen markiert?

29voto

Joshua Nozzi Punkte 60200

Es scheint sich nicht nur nicht um den Status der Skriptbeendigung vor und nach der Aktion zu kümmern, sondern auch nicht um die Ausgabe in den Build/Run-Protokollen. Es gibt ich glaube, zwei separate Threads über diese in Apples Xcode 4 Dev-Foren begraben. Kein Wort darüber, ob dies ein Fehler oder eine Funktion ist.

5voto

Farcaller Punkte 2951

Sie können etwas hinzufügen wie kill $PPID in der Skriptausführungsphase, um den xcodebuild zu beenden (mit Exitcode 70).

1voto

ishahak Punkte 5970

Bei Verwendung von Xcode, kill $PPID ist keine Lösung, wie ich Farcaller gegenüber bemerkte.

Meine Lösung besteht darin, dass das Pre-Action-Skript eine Header-Datei erzeugt (z. B. SchemePreActions.h ) und machen Sie es für die normale Situation leer, und fügen Sie es in Ihren Code ein (z. B. in AppDelegate.m ).

Wenn Sie möchten, dass das Pre-Actions-Skript einen Fehler meldet, können Sie auf diese Weise eine #error Zeile, wie in diesem Beispiel aus der Praxis:

if [ $CONFIGURATION == Debug ]; then
    echo "#error AppStore builds must not be in debug configuration" >> SchemePreActions.h
fi

Xcode meldet diesen Fehler sehr schön.

Es wird empfohlen, die erzeugte Datei von git ignorieren zu lassen.


Als Tipp Ich möchte hinzufügen, dass mein Pre-Actions-Skript immer mit diesen Zeilen beginnt:

echo "//auto-generated. no need to commit"      > SchemePreActions.h
echo "#define SCHEME_${SCHEME_NAME}"            >> SchemePreActions.h
echo "#define SCHEME_NAME @\"${SCHEME_NAME}\""  >> SchemePreActions.h
if [[ ${SCHEME_NAME} =~ "_PROD" ]]; then
    echo "#define PRODUCTION"                   >> SchemePreActions.h
fi

Auf diese Weise, durch die Einbeziehung SchemePreActions.h kann mein Code testen, ob er unter einem bestimmten Schema läuft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X