Аргументы xcodebuild игнорируются при использовании архива
Меня зовут Лука, и в настоящее время я работаю над непрерывной интеграцией iOS для создания приложений в xcode для распространения (Ad Hoc и App Store) с использованием сценариев оболочки.
До сих пор я добился хороших результатов с файлами IPA. Моя проблема касается распространения в App Store. Чтобы собрать.app из скрипта (передавая некоторые аргументы), я делаю:
xcodebuild -scheme myScheme -configuration myConfiguration PRODUCT_NAME=myProductName TARGETED_DEVICE_FAMILY=myTargetedDeviceFamily .... etc
Поскольку в XCode 4.2 отправка приложений осуществляется с помощью окна XCode Organizer, я также должен иметь возможность архивировать свой исполняемый файл.
Поэтому я изменяю предыдущую командную строку следующим образом:
xcodebuild -scheme myScheme -configuration myConfiguration PRODUCT_NAME=myProductName TARGETED_DEVICE_FAMILY=myTargetedDeviceFamily .... etc **archive**
К сожалению, после этого кажется, что аргумент 'archive' заставляет xcodebuild игнорировать другие (PRODUCT_NAME, TARGETED_DEVICE_FAMILY, ....), и мой вывод создается с использованием предопределенных настроек сборки XCode.
Я хочу иметь возможность передавать аргументы с помощью xcodebuild и быть эффективным, но действие "архив", кажется, предотвращает это.
Я схожу с ума, пожалуйста, помогите:)
Спасибо
3 ответа
Действие архива для xcodebuild, похоже, содержит ошибку в Xcode 4.2. Обычно переопределения для конфигурации проекта могут быть указаны как параметры командной строки или через -xcconfig
параметр.
Несмотря на то, что действие build соблюдает их, архив - нет. (Предположительно, это связано с тем, что архив является мета-действием, которое вызывает сборку внутри, но не пропускает опции для внутреннего вызова.) Существует ошибка OpenRadar, которая описывает эту проблему, поэтому предположительно об этом сообщили в Apple.
Наконец, обратите внимание, что если вы собираетесь использовать действие архивирования из скрипта, вы не можете полагаться на код выхода из xcodebuild. Действие архива всегда дает код выхода 0 (успех, по соглашению). Чтобы обнаружить сбой сборки, вам нужно очистить вывод.
Я столкнулся с этой же проблемой. Мой текущий обходной путь - в основном, чтобы удалить другие конфигурации, поэтому архив вынужден использовать ту, которую вы хотите. На самом деле это не решение, которое можно сделать из командной строки, надеюсь, Apple исправит эту явную проблему.
Это может быть слишком поздно для оригинального плаката, но может помочь другим. для моего процесса сборки я использую xcodebuild, чтобы сначала очистить, а затем собрать, а затем использовать xcrun для создания архива:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "build/<Path_to_build_dir>/<App_Name>.app" -o "<Path_to_archive_output>.ipa" --sign "<signing identity>" --embed "<path to provision profile>.mobileprovision"
с помощью этой команды я могу создать архив для магазина приложений или даже загрузить специальную сборку в TestFlight следующим образом:
curl http://testflightapp.com/api/builds.json \
-F file="<path to archive>" \
-F api_token='<api token>' \
-F team_token='<team token>' \
-F notes='Automated build' \
-F notify=True \
-F distribution_lists='me'
это работает с Xcode 6.1