2011-08-16 11 views
7

Nie chcę, aby kompilacja archiwum zakończyła się powodzeniem, chyba że mój katalog roboczy jest czysty. Dlatego chcę dodać "Run Script" budować fazy (lub coś podobnego) do mojego projektu Xcode takie, że:Jak zatrzymać tworzenie archiwum Xcode, jeśli moja kopia robocza git jest brudna?

IF ja wykonywania build Archiwum ...

I istnieją niezatwierdzone zmiany w katalogu źródłowym

THEN kompilacja kończy się niepowodzeniem z błędem.

Pracuję z Xcode 4 i git 1.7.

Co to jest dobry, zwięzły skrypt wielokrotnego użytku, który wykona zadanie?

Odpowiedz

9

Oto skrypt mam wymyślić:

#!/bin/sh 
if [ -z "$(git status --porcelain)" ]; then 
    TAG=`date +xcarchive-%Y%m%d-%H%M%S` 
    echo "Working directory clean, creating tag ${TAG}" 
    git tag -a -m "Xcode Archive created" ${TAG} 
    exit 0 
else 
    echo "error: Working directory dirty, stopping build" 
    exit 1 
fi 

Jako bonus, tworzy tag jeśli kopia robocza jest czysta.

Kontrola czysta/brudna opiera się na this question (o której zapomniałem, że zaproponowałem odpowiedź). Jeśli nie chcesz utworzyć znacznika, usuń linię .

Jeśli nie chcesz zatrzymywać kompilacji, usuń linię exit 1.

Aby zainstalować to w projekcie:

  1. umieścić to w pliku w katalogu projektu (nazwałem go ArchiveHousekeeper.sh) i upewnić się, że plik wykonywalny bit jest ustawiony (chmod +x)
  2. w twojej Xcode Projektu dodaj nowy "zewnętrzny system budowania" target
    • Nazwa: "Archiwum Gosposia" (lub cokolwiek chcesz)
    • Budowa narzędzi: ./ArchiveHousekeeper.sh
  3. W menu Xcode, wybierz produkt -> Schematu Edit ...
  4. W sekcji Build dodać nowy cel, a następnie usuń zaznaczenie wszystkich pól z wyjątkiem jednego w kolumnie Archiwum. Dzięki temu skrypt będzie uruchamiany tylko w Archiwum. (Patrz: this question, aby uzyskać wyjaśnienie i ładny zrzut ekranu.)
  5. Teraz spróbuj utworzyć archiwum i zobacz, jak to się nie uda, ponieważ nie sprawdziłeś tych zmian!

Byłoby miło, gdyby można było użyć Xcode 4 przed i po akcji (więc nie trzeba tworzyć "fałszywego" celu), ale nie wydają się one w stanie wpłynąć na kompilacji, a także nie mam pojęcia, w którym katalogu są wykonywane, jakie zmienne środowiskowe są dostępne lub dokąd trafiają ich dane wyjściowe.

+0

Dzięki! Zajęło mi trochę czasu, aby dowiedzieć się, jak [dodać nowy cel] (http://stackoverflow.com/a/10407469/2547229)! – Benjohn

+0

Jestem dość chętny, aby móc używać ustawień kompilacji w skrypcie - w zasadzie chcę [nazwę kompilacji, wersję i numer kompilacji w tagu] (http://stackoverflow.com/q/27326469/2547229). Te zmienne nie wydają się być podane skryptowi przy użyciu tego podejścia? – Benjohn

+0

W Xcode 8.3.2, dodaj cel "Zewnętrzny system kompilacji" poprzez Plik> Nowy> Cel ...> Wieloplatformowy> Zewnętrzny system kompilacji. –

Powiązane problemy