Это нормально для XCode, чтобы не обнаружить, если предварительное действие не удалось? - PullRequest
18 голосов
/ 24 марта 2011

Я использую Xcode 4, и я добавил preaction в схему run , скрипт bash, но кажется, что Xcode игнорирует состояние выхода скрипта и всегда запускается, даже если код выходане ноль.

Это нормально?Какие есть альтернативы для добавления пользовательского шага, который может завершиться неудачей?

Обновление: Я также пробовал exit 1 для пост-действия для сборки, но с теми же результатами, всегда выполняющимисябез каких-либо отзывов.

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

Ответы [ 3 ]

21 голосов
/ 25 марта 2011

Мало того, что он не только не заботится о состоянии завершения скрипта до / после действия, но и, кажется, не помещает вывод в журналы сборки / запуска. Я думаю, что две отдельные темы об этом похоронены на форумах разработчиков Apple Xcode 4. Нет слов о том, является ли это ошибкой или функцией.

3 голосов
/ 07 февраля 2012

Вы можете добавить что-то вроде kill $PPID на этапе запуска сценария, чтобы завершить xcodebuild (с кодом выхода 70).

0 голосов
/ 03 января 2017

При использовании Xcode, kill $PPID не является решением, как я комментировал Farcaller.

Мое решение состоит в том, чтобы сценарий предварительного действия сгенерировал заголовочный файл (например, SchemePreActions.h ) и сделал его пустым для нормальной ситуации, а также включил его в код (например, в AppDelegate.m ).

Таким образом, если вы хотите, чтобы скрипт предварительного действия сообщал об ошибке, поместите туда строку #error, как в этом реальном примере:

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

Xcode очень хорошо сообщит об этой ошибке.

Рекомендуется, чтобы сгенерированный файл игнорировался git.


В качестве подсказки Я добавлю, что мой сценарий перед действиями всегда начинается со следующих строк:
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

Таким образом, включая SchemePreActions.h , мой код может проверить, работает ли он подконкретная схема.

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