XCode "Build and Archive" из командной строки - PullRequest
375 голосов
/ 19 апреля 2010

Xcode 3.2 предоставляет потрясающую новую функцию в меню Build, «Build and Archive», которая генерирует файл .ipa, подходящий для Ad Hoc распространения. Вы также можете открыть Органайзер, перейти к разделу «Архивные приложения» и «Отправить приложение в iTunesConnect».

Есть ли способ использовать «Build and Archive» из командной строки (как часть сценария сборки)? Я бы предположил, что xcodebuild будет каким-то образом вовлечено, но страница man, похоже, ничего об этом не говорит.

ОБНОВЛЕНИЕ Михаил Гринич запросил разъяснения; вот что именно вы не можете сделать с помощью сборок из командной строки, функции, которые вы можете сделать ТОЛЬКО с Xcode Organizer после «Сборка и архивирование».

  1. Вы можете нажать «Поделиться приложением ...», чтобы поделиться своим IPA с бета-тестерами. Как указывает Гийом ниже, из-за некоторой магии XCode этот файл IPA не требует отдельно распространяемого файла .mobileprovision, который требуется установить бета-тестерам; это волшебно Никакой сценарий командной строки не может это сделать. Например, сценарий Arrix (представленный 1 мая) не соответствует этому требованию.
  2. Что еще более важно, после того, как вы протестировали сборку, вы можете нажать «Отправить приложение в iTunes Connect», чтобы отправить эту ТОЧНУЮ сборку в Apple, сам бинарный файл, который вы тестировали, без перекомпоновки. Это невозможно из командной строки, потому что подписание приложения является частью процесса сборки; вы можете подписывать биты для бета-тестирования Ad Hoc ИЛИ вы можете подписывать их для отправки в App Store, но не для обоих. Ни один IPA, построенный на командной строке, не может быть бета-тестирован на телефонах, а затем отправлен непосредственно в Apple.

Я бы хотел, чтобы кто-то пришел и доказал, что я не прав: обе эти функции прекрасно работают в графическом интерфейсе XCode и не могут быть реплицированы из командной строки.

Ответы [ 19 ]

8 голосов
/ 05 октября 2016

Xcode 8:


IPA Формат:

xcodebuild -exportArchive -exportFormat IPA -archivePath MyMobileApp.xcarchive -exportPath MyMobileApp.ipa -exportProvisioningProfile 'MyMobileApp Distribution Profile'

Экспортирует архив MyMobileApp.xcarchive в виде файла IPA по пути MyMobileApp.ipa, используя профиль обеспечения Профиль распространения MyMobileApp.

Формат приложения:

xcodebuild -exportArchive -exportFormat APP -archivePath MyMacApp.xcarchive -exportPath MyMacApp.pkg -exportSigningIdentity 'Developer ID Application: My Team'

Экспортирует архив MyMacApp.xcarchive в виде файла PKG по пути MyMacApp.pkg с помощью приложения-приложения. идентификация подписи катиона Идентификатор разработчика Приложение: Моя команда. Установщик подписывает удостоверение личности Установщик идентификатора разработчика: моя команда неявно используется для подписи экспортируемого пакета.

Страница руководства по Xcodebuild

6 голосов
/ 27 апреля 2010

Перейдите в папку, где находится корень вашего проекта и:

xcodebuild -project projectname -activetarget -activeconfiguration archive
4 голосов
/ 23 марта 2016

Пройдя еще один шаг, загрузите в iTunesConnect с помощью командной строки Xcode 7 ! (Предполагается, что вы начинаете с .ipa, который был подписан с правильным профилем выпуска и подписью.)

Введите altool, интерфейс CLI для загрузчика приложений (docs, стр. 38). Скрытая глубоко в структуре Xcode.app, это удобная функция, которая позволяет загружать файлы непосредственно в ItunesConnect.

/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool

Просто запустите $ altool --upload-app -f file -u username [-p password], чтобы загрузить только что набранный .ipa прямо в Apple. Пароль не является обязательным, и вам будет предложено ввести его, если вы не включите его в команду.

Если на этапе проверки возникнут проблемы с приложением, консоль распечатает их.

Вам, вероятно, придется экспортировать путь в altool, если вы не хотите сохранять его местоположение.

export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

Вот и все! Просто войдите на iTunesConnect.com и выберите новую сборку для тестирования с помощью testflight.

Заключительное примечание: Если вы получите сообщение «1027 *», вы можете следовать предложению этого ответа SO , чтобы запустить символическую ссылку в правильное местоположение:

ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms
3 голосов
/ 17 ноября 2011

Улучшая ответ Винсента, я написал скрипт для этого: xcodearchive
Это позволяет архивировать (генерировать ipa) ваш проект через командную строку. Думайте об этом как о сестре команды xcodebuild, но для архивации.

Код доступен на github: http://github.com/gcerquant/xcodearchive


Один из вариантов сценария - включить архивирование символов dSYM в архиве с метками времени. Нет оправдания тому, чтобы больше не хранить символы и не иметь возможности символизировать журнал сбоев, который вы можете получить позже.

2 голосов
/ 14 января 2015

, если вы используете следующий инструмент: https://github.com/nomad/shenzhen

тогда эта задача очень проста:

which ipa 1>/dev/null 2>&1 || echo 'no shenzhen. to install use: sudo gem install shenzhen --no-ri --no-rdoc'
ipa build --verbose --scheme "${schemeName}"

источник

2 голосов
/ 23 сентября 2016

После обновления до Xcode 8 я обнаружил, что корпоративный ipa генерирует

/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}" 

Команда не может быть запущена из-за проблем с подписью. Журнал указывает, что «предупреждение: PackageApplication устарела, используйте xcodebuild -exportArchive вместо.

Итак, я переключаюсь на xcodebuild -exportArchive и все возвращается в норму.

2 голосов
/ 17 мая 2013

попробуйте xctool, это замена для xcodebuild от Apple, которая упрощает создание и тестирование продуктов для iOS и Mac. Это особенно полезно для непрерывной интеграции. Он имеет несколько дополнительных функций:

  1. Запускает те же тесты, что и Xcode.app.
  2. Структурированный вывод результатов сборки и тестирования.
  3. Удобный для человека цвет ANSI.

No.3 чрезвычайно полезен. Я не могу, если кто-то может прочитать вывод консоли xcodebuild, я не могу, обычно он дает мне одну строку с 5000+ символами. Читать даже труднее, чем дипломную работу.

xctool: https://github.com/facebook/xctool

1 голос
/ 13 февраля 2019

Как построить проект iOS с помощью команды?

Clean : codebuild clean -workspace work-space-name.xcworkspace -scheme scheme-name 

&&

Archive : xcodebuild archive -workspace work-space-name.xcworkspace -scheme "scheme-name" -configuration Release -archivePath IPA-name.xcarchive 

&&

Export : xcodebuild -exportArchive -archivePath IPA-name.xcarchive -exportPath IPA-name.ipa -exportOptionsPlist exportOptions.plist


Что такое ExportOptions.plist?

ExportOptions.plist требуется в Xcode. Позволяет указать некоторые параметры при создании файла ipa. Вы можете выбрать параметры в дружественном пользовательском интерфейсе, когда вы используете Xcode для архивирования своего приложения.

Важно : метод для выпуска и разработки отличается в ExportOptions.plist

AppStore:

exportOptions_release ~ method = app-store

Разработка

exportOptions_dev ~ method = development

1 голос
/ 20 июля 2010

Вы имеете в виду параметры проверки / обмена / отправки? Я думаю, что они специфичны для XCode и не подходят для инструмента сборки из командной строки.

С некоторой сообразительностью, держу пари, ты мог бы сделать сценарий, чтобы сделать это для тебя. Похоже, они просто хранятся в ~/Library/MobileDevice/Archived Applications/ с UUDI и списком. Я не могу себе представить, что так же сложно будет спроектировать валидатор.

Процесс, который меня интересует, автоматизирует отправку сборок бета-тестерам. (Поскольку передача в App Store происходит нечасто, я не возражаю делать это вручную, тем более что мне часто нужно добавлять новый текст описания.) Выполняя псевдо-сборку + архив с использованием интерфейса командной строки Xcode, я могу запускать автоматическую сборку из каждой фиксации кода создавать файлы IPA со встроенными профилями обеспечения и отправлять их тестерам по электронной почте.

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