xcodebuild другой профиль обеспечения для целевой зависимости

Я пытаюсь собрать свое приложение с помощью xcodebuild:

xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210"

Моя схема имеет две цели. Одна цель - приложение, другая - расширение приложения (я создал расширение для Safari). Расширение приложения является целевой зависимостью. Каждая цель требует отдельного профиля обеспечения. Я не знаю, как указать PROVISIONING_PROFILE для зависимости. Я получаю эту ошибку, как и ожидалось:

CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1'

Stackru и справочная страница для xcodebuild, похоже, ничего не придумали. Кто-нибудь знает, как создать проект с xcodebuild, который опирается на два профиля обеспечения?

4 ответа

Решение

Я провел слишком много времени, работая над этим сегодня. Я был на пути в кровать, когда ответ ударил меня:

В настройках сборки каждой из ваших целей вы должны установить $VARIABLE для имени профиля. Для этого выберите "Другие" в нижней части списка профилей. При этом откроется текстовое поле - выберите другое $VARIABLE для каждой цели - например, я выбрал $APP_PROFILE для цели приложения контейнера и $EXTENSION_PROFILE для моей цели расширения сегодня

Добавление переменной переменной сборки

Это приведет к чему-то вроде следующего:

профили

Наконец, при построении с xcodebuildукажите UUID профиля, как вы сделали с PROVISIONING_PROFILE:

xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"

Построение изнутри XCode, кажется, не затронуто - насколько я могу судить, XCode выбирает профили по умолчанию (как будто в "автоматическом" режиме)

Теоретически это будет поддерживать несколько расширений тоже.

У меня работает с XCode 6.3:)

Решение без переменной

Есть вариант, -exportSigningIdentity это может помочь вам, поскольку профили обеспечения приложения и расширения / виджета могут отличаться, но идентификаторы подписи приложения и расширения должны быть одинаковыми.

Например, вы увидите, что

  • TargetApp -> Настройки сборки -> "Идентификация подписи кода (id)" (выпуск)
  • TargetExtension -> Настройки сборки -> "Идентификация подписи кода (id)" (выпуск)

по сути, одна и та же строка, скажем, это тождество "Идентификация подписи кода (id)". Таким образом, чтобы создать и экспортировать архив, то, что вы можете запустить, это просто,

очищающий

xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld

Строительство

xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive

Экспорт

xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"

Ссылка: документация по xcodebuild

Месяцы спустя... Нашли решение, которое не включает значения настроек в XCode: Внутри sigh Существует сценарий, который может подать в отставку файл IPA с заданными профилями. Следующие работы для меня:

bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose

где:

  • Experiments-AdHocProd.ipa это существующий ipa
  • com.company.experiments.AudioPlugin это идентификатор пакета расширения
  • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision это расширение профиля
  • com.company.experiments основной идентификатор пакета приложения
  • Experiments-AdHocProd.mobileprovision основной профиль приложения

Идентификатор пакета каждого профиля должен совпадать с идентификатором приложения, с которым он будет подписан.

Я обнаружил, что важно отметить, что если идентификатор пакета имеет подстановочный знак (в моем случае Experiments-AdHocProd.mobileprovision делает) тогда профили с явными идентификаторами должны быть переданы в -p первый.


В качестве альтернативы, вы можете использовать sigh выполнить отставку. К несчастью, sigh --help ничего не говорит об отставке бинарных файлов с расширениями, однако sigh resign --help делает.

В Swift структура файлов Pod будет упакована отдельно. Следующие шаги решили проблему.

 1. Select pods 
 2. Targets
 3. General
 4. Edit bundle id
 5. Build Settings
 6. Code Signing
 7. Provisioning profile -> select the valid profile
 8. Code Signing Identity -> Select the respective identity from
    profile.

Повторите то же самое для всех целей.

Я могу генерировать сборку.

Другие вопросы по тегам