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'

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

Ответ 1

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

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

Adding a build variable variable...

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

Profiles

Наконец, при создании с помощью xcodebuild укажите UUID профиля, как это было в PROVISIONING_PROFILE:

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

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

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

Работает для меня с XCode 6.3:)

Ответ 2

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

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

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

  • TargetApp → Настройки сборки → "Идентификация подписи кода (id)" (Release)
  • TargetExtension → Настройки сборки → "Идентификация подписи кода (id)" (Release)

- это, по сути, одна и та же строка, скажем, это тождество "Идентификация подписи кода (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

Ответ 3

Месяцы спустя... Нашел решение, которое не включает значения параметров в Xcode: В sigh есть script, который способен отменить файл 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 является идентификатором расширения ID
  • Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision - это профиль расширения
  • com.company.experiments является основным идентификатором пакета приложений
  • Experiments-AdHocProd.mobileprovision - основной профиль приложения.

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

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


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

Ответ 4

В 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.

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

Я могу создать сборку.