Xcode, похоже, не выполняет мою схему последействия
Я использую Xcode (4.6.2), а моя цель - инструмент внешней сборки. Автоматически созданная схема вызывает это просто отлично во время сборки.
В режиме RUNNING мне нужна схема для запуска другой оболочки script. Это было неинтуитивно, но мне это удалось, установив /bin/bash
в качестве исполняемого файла и передав мой параметр script.
Единственный шаг, который я хочу сделать, - это выполнить еще один script ПОСЛЕ запуска. И здесь я думал, что будет легко и просто попытаться установить его как пост-действие.
НО что бы ни случилось, я не могу заставить xcode выполнять мое post-action script.
Неважно, что это. Я пробовал echo hi > /tmp/testfile
даже...
Мне нужно это пост-действие, чтобы немного очистить.
Короче говоря:
- У меня есть script
build_me
, который является моим внешним инструментом сборки
- У меня есть script
run_me
, что я установил свою схему для запуска
- У меня есть script
cleanup
, который я хочу иметь в качестве запуска post-action
Невозможно заставить Xcode запустить мое post-action script или любое.
Ответы
Ответ 1
Это работает на XCode 5.0, проверено, я полагаю, что он должен работать так же в 4.6.2.
Пост-действие работает только при выходе из программы из программы
Он не запускается, когда вы нажимаете "Остановить" в XCode или в противном случае завершаете программу. Для моего случая он работает, когда я нажимаю CMD-Q, когда программа находится в фокусе.
Использование файла bash script для пост-действий
Эти настройки работают:
![enter image description here]()
Ответ 2
Это немного странно, но Архив выполняет сценарии pre и post при вызове из командной строки.
Итак, я сделал файл archive.sh script в моей папке проекта, я передаю имя проекта (то же самое, что и главная цель, но вы можете настроить это как хотите) в качестве параметра:
xcodebuild clean -project $1.xcodeproj -configuration Release -target $1
xcodebuild archive -project $1.xcodeproj -scheme $1
Затем я создаю целевое имя "Внешняя сборка" "Архив", с. /archive.sh как script.
Когда я создаю эту цель, проект очищается, создается и архивируется.
и post script, определенный в схеме, выполняется
Просто замечание, так как я строю из оболочки script, я удалил свой post script в схеме архива, и вместо этого назовите его после моей сборки команд в моем архиве .sh script.
Этот способ дает мне лучший контроль над рабочими каталогами, переменными и все... Это гораздо удобнее
Ответ 3
Я предлагаю вам включить ведение журнала в файл, добавив exec > /tmp/xcode_build.log 2>&1
в начало этапа script.
Вы можете просмотреть журнал, запустив cat /tmp/xcode_build.log
в терминале
Это позволит вам распечатывать пути и т.д. и проверять функциональность ваших скриптов.
Чтобы распечатать местоположение script, вы можете указать следующее в своем post-action:
exec > /tmp/my_log_file.txt 2>&1
pwd
Ответ 4
В зависимости от языка программирования, который вы используете, вы можете сделать (это псевдокод):
system( <command> 2>&1 | tee run.log && exit $PIPESTATUS )
Ответ 5
Если кто-то еще сталкивается с этим, я использовал файл script в моей директории проекта, и у файла не было прав доступа для процесса сборки для запуска script. Я сделал следующее в области pre/post action/Run script
chmod 755 ${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh
${PROJECT_DIR}/BuildScripts/IncrementBuildNumber.sh