Как я могу остановить сборку Xcode Archive, если моя рабочая копия git грязная? - PullRequest
9 голосов
/ 17 августа 2011

Я не хочу, чтобы сборка архива была успешной, если мой рабочий каталог не очищен. Поэтому я хочу добавить фазу сборки «Run Script» (или что-то похожее) в мой проект Xcode так, чтобы:

ЕСЛИ Я выполняю сборку архива ...

И в моем исходном каталоге есть незафиксированные изменения

ТО сборка завершается с ошибкой.

Я работаю с Xcode 4 и git 1.7.

Какой хороший, краткий, многократно используемый скрипт, который сделает эту работу?

1 Ответ

10 голосов
/ 17 августа 2011

Вот сценарий, который я придумал:

#!/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

В качестве бонуса создает тег, если рабочая копия чистая.

Проверка на чистоту / грязь основана на этом вопросе (я забыл, что предложил ответ).

Если вы не хотите создавать тег, удалите строку git tag.

Если вы не хотите останавливать сборку, удалите строку exit 1.

Чтобы установить это в проекте:

  1. Поместите это в файл в каталоге вашего проекта (я назвал его ArchiveHousekeeper.sh) и убедитесь, что установлен исполняемый бит (chmod +x)
  2. В вашем проекте XCode добавьте новую цель "Внешняя система сборки"
    • Имя: "Домработница архива" (или как угодно)
    • Инструмент сборки: ./ArchiveHousekeeper.sh
  3. В меню Xcode выберите Product -> Edit Scheme ...
  4. В разделе «Построение» добавьте новую цель, затем снимите все флажки, кроме одного в столбце «Архив». Это гарантирует, что скрипт будет работать только в архиве. (См. этот вопрос для объяснения и хорошего скриншота.)
  5. Теперь попробуйте создать архив и посмотреть, как он провалится, потому что вы не отметили эти изменения!

Было бы неплохо, если бы для этого могли использоваться предварительные и последующие действия Xcode 4 (поэтому вам не нужно создавать «поддельные» цели), но они, похоже, не могут влиять на сборку, и Кроме того, я понятия не имею, в каком каталоге они выполняются, какие переменные среды доступны или куда направляется их вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...