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.
Повторите то же самое для всех целей.
Я могу создать сборку.