xcodebuild -exportArchive завершается с ошибкой

Я использую инструмент командной строки xcodebuild для экспорта.ipa файлов из архивов Xcode. Он отлично работал с Xcode 8.3.3. Такая же настройка перестала работать с Xcode 9 beta. Теперь с этой ошибкой не получается:

IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fc309310550>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed."

Кажется, что Xcode 9 не может найти профили обеспечения, но почему?

Ответ 1

Я выполнял эту команду:

xcodebuild -exportArchive -archivePath archive.xcarchive -exportPath /my/export/path -exportOptionsPlist options.plist

Мой проект использует ручную подпись. Оказывается, Xcode 9 нуждается в именах профиля обеспечения или UUID, указанных в options.plist, чтобы подписать экспортированный.ipa файл. Я добавил эту запись в мои параметры. Plist:

<key>provisioningProfiles</key>
<dict>
    <key>com.myapp.bundle.id</key>
    <string>My AdHoc Provisioning Profile Name</string>
</dict>

И ошибка "Локализация активов подписи не удалась" исчезла. Однако была и другая ошибка:

IDEDistribution: Step failed: <IDEDistributionPackagingStep: 0x7f9dfd8e5930>: Error Domain=IDEFoundationErrorDomain Code=1 "ipatool failed with an exception: #<CmdSpec::NonZeroExcitException: CmdSpec::NonZeroExcitException>

Xcode 9 по умолчанию перекомпилирует приложение из битового кода. Я преодолел эту ошибку, отключив биткод, добавив еще одну запись в мои параметры. Plist:

<key>compileBitcode</key>
<false/>

Теперь я наконец смогу создать свое приложение с Xcode 9 и экспортировать файлы ipa с помощью xcodebuild без ошибок.

Ответ 2

В моем случае проблема была решена следующими полями в -exportOptionsPlist:

<dict>
  <key>compileBitcode</key>
  <false/>

  <key>method</key>
  <string>ad-hoc</string>

  <key>provisioningProfiles</key>
  <dict>
      <key>com.my.bundle.id</key>
      <string>AD_HOC_PROVISIONING_PROFILE_NAME</string>
  </dict>

  <key>signingCertificate</key>
  <string>CERTIFICATE_HASH</string>

  <key>signingStyle</key>
  <string>manual</string>

  <key>teamID</key>
  <string>TEAM_ID</string> 
</dict>

Поэтому, видимо, мне пришлось установить: compileBitcode, method, provisioningProfiles, signingCertificate, signingStyle и teamID.

В вашем случае набор полей может быть другим. Я узнал свой набор, архивируя и экспортируя .ipa через Xcode 9. XCode экспортирует свой exportOptionsPlist с ipa и покажет, какие поля он использовал.

Дополнительная информация об обнаружении полей: https://blog.bitrise.io/new-export-options-plist-in-xcode-9