Не удалось создать сборку Xcode 9, потому что формат exportOptions.plist изменился в новой версии

Я пытаюсь скомпилировать ad-hoc IPA для своего приложения, используя SDK версии 6.1.2 и Xcode 9 beta (пытаясь увидеть, работает ли приложение в новой версии). Моя сборка не работает со следующим сообщением об ошибке:

Error Domain=IDEProvisioningErrorDomain Code=9 ""DGHospice.app" 
requires a provisioning profile." UserInfo=
{NSLocalizedDescription="DGHospice.app" requires a provisioning 
profile., NSLocalizedRecoverySuggestion=Add a profile to the 
"provisioningProfiles" dictionary in your Export Options property  
list.}

Профиль распространения действителен, и я могу создать IPA, если я использую SDK для iOS 10. Сборка только сбой в 11.0. Может ли кто-нибудь помочь мне определить проблему?

Ответы

Ответ 1

Похоже, вы используете ручную подпись кода (определяется Export Options property list в вашем сообщении об ошибке). Возможно, вам следует переключиться на автоматическую подпись кода в соответствии с рекомендациями Apple, если это соответствует вашим потребностям.

Проблема заключается в том, что формат exportOptions.plist не совместим с Xcode 9. Пустой список распространения для Xcode 9 теперь выглядит примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
      <key>provisioningProfiles</key>
      <dict>
        <key>MY_APP_BUNDLE_ID</key>
        <string>MY_PROFILE_NAME_AS_SHOWN_BY_XCODE or UUID_FOUND_IN_MOBILEPROVISION_FILE</string>
      </dict>
      <key>signingCertificate</key>
      <string>iOS Distribution</string>
      <key>signingStyle</key>
      <string>manual</string>
      <key>teamID</key>
      <string>MY_TEAM_ID</string>
  </dict>
</plist>

Вы можете увидеть список поддерживаемых опций для exportOptions.plist, запустив xcodebuild -help.

Вы можете получить полезный обзор того, как этот материал работает в Xcode 9, посмотрев это видео: https://developer.apple.com/videos/play/wwdc2017/403/

Вы также можете получить помощь, выполнив поиск "Подписание вручную" в поле поиска XCode.

Вы можете создать фиктивный файл exportOptions.plist, следуя процедуре, описанной здесь Анной Батки в BitRise: http://blog.bitrise.io/2017/08/15/new-export-options-plist-in-Xcode-9.html

Вы должны знать, что если вы выполните шаги Анны, используя Xcode 9 beta 5, exportOptionsPlist не будет экспортироваться. Это поведение снова работает в Xcode 9 GM.

Чтобы определить значение вашего профиля обеспечения в файле exportOptionsPlist, вы можете просмотреть содержимое файла .mobileprovision, который вы хотите использовать, и задать ключ для идентификатора пакета вашего приложения ('com.foo') и значение UUID в вашем файле .mobileprovision.

Вы можете увидеть профили обеспечения, которые будет использовать сборка, посмотрев здесь: ls ~/Library/MobileDevice/Provisioning\ Profiles/

Другим полезным инструментом является использование функции QuickLooks в Finder для просмотра значений профилей обеспечения без необходимости запуска редактора.

Ответ 2

используйте команду /Applications/Xcode-beta.app/xcodebuild -help. У вас будет подробная информация о exportOptionsPlist Доступные ключи для -exportOptionsPlist:

....

provisioningProfiles: Словарь

Только для ручной подписи. Укажите профиль подготовки, который будет использоваться для каждый исполняемый файл в вашем приложении. Ключами в этом словаре являются набор идентификаторы исполняемых файлов; значения - это имя профиля инициализации или UUID для использования.

....

Вот пример о plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.aaa.bbb</key>
        <string>adhoc_bbb</string>
        <key>com.aaa.ccc</key>
        <string>adhoc_ccc</string>
    </dict>
    <key>method</key>
    <string>ad-hoc</string>
    <key>uploadBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <true/>
</dict>
</plist>