Вот сценарий, который я придумал:
#!/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
.
Чтобы установить это в проекте:
- Поместите это в файл в каталоге вашего проекта (я назвал его
ArchiveHousekeeper.sh
) и убедитесь, что установлен исполняемый бит (chmod +x
)
- В вашем проекте XCode добавьте новую цель "Внешняя система сборки"
- Имя: "Домработница архива" (или как угодно)
- Инструмент сборки:
./ArchiveHousekeeper.sh
- В меню Xcode выберите Product -> Edit Scheme ...
- В разделе «Построение» добавьте новую цель, затем снимите все флажки, кроме одного в столбце «Архив». Это гарантирует, что скрипт будет работать только в архиве. (См. этот вопрос для объяснения и хорошего скриншота.)
- Теперь попробуйте создать архив и посмотреть, как он провалится, потому что вы не отметили эти изменения!
Было бы неплохо, если бы для этого могли использоваться предварительные и последующие действия Xcode 4 (поэтому вам не нужно создавать «поддельные» цели), но они, похоже, не могут влиять на сборку, и Кроме того, я понятия не имею, в каком каталоге они выполняются, какие переменные среды доступны или куда направляется их вывод.