it-roy-ru.com

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

27
Rey Gonzales

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

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

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 :)

47
Max Chuquimia

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

Существует опция -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

2
Sazzad Hissain Khan

Месяцы спустя ... Нашли решение, которое не включает значения настроек в 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 говорит. 

1
Max Chuquimia

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

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

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

0
Pebby