Подтвердить что ты не робот

Нормально ли для Xcode не обнаруживать, не завершилось ли предварительное действие?

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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


Как подсказка Я добавлю, что мои предварительные действия script всегда начинаются с этих строк:
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, мой код может проверить, работает ли он по конкретной схеме.