Azure DevOps -exportArchive: ошибка exportOptionsPlist для ключа ‘method’: ожидалось одно из {} , но найдено

Вопрос или проблема

Я пытаюсь запустить конвейер Azure DevOps для задачи с именем: Xcode@5.

Я постоянно получаю следующую ошибку: Error Domain=IDEFoundationErrorDomain Code=1 "exportOptionsPlist error for key "method": expected one of {}, but found development" UserInfo={NSLocalizedDescription=exportOptionsPlist error for key "method": expected one of {}, but found development}. Я не знаю, откуда появляется development и как это исправить.

  • Полный конвейер:
trigger:
  branches:
    include:
      - dev

pool:
  vmImage: 'macos-latest'

resources:
 repositories:
 - repository: AheLineIOS
   type: git
   name: AheLineIOS/AheLineIOS
   trigger:
     branches:
       include:
       - deneme
     paths:
       include:
       - AHELine.UI/*
       - AheLine.Robo/*
       - AHELine.Data/*
       - AHELine.Common/*
       - Pods/*
       exclude:
       - ExportOptions_prod.plist

steps:
- checkout: AheLineIOS
  clean: true

- task: PowerShell@2
  displayName: Выбор версии Xcode
  inputs:
    targetType: 'inline'
    script: |
      echo Версия Mac OS:
      sw_vers -productVersion
      echo Установленные версии Xcode:
      ls /Applications | grep 'Xcode'
      echo Текущая версия xcode:
      xcrun xcode-select --print-path
      echo выбираю последнюю версию xcode...
      sudo xcode-select -s /Applications/Xcode_15.0.1.app
      xcrun xcode-select --print-path
      echo Выбранная версия Xcode:
      xcodebuild -version
      xcodebuild -downloadAllPlatforms 

- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'DistributionCertificates2024.p12'
    certPwd: '$(provisioningProfilePassword2)'
    keychain: 'temp'

- task: InstallAppleProvisioningProfile@1
  inputs:
    provProfileSecureFile: 'AheMobilProd.mobileprovision'
    removeProfile: true
    provisioningProfileLocation: 'secureFiles' 

- task: Xcode@5
  inputs:
    actions: 'clean'
    configuration: 'Release'
    sdk: 'iphoneos'
    xcWorkspacePath: 'AheLine.xcworkspace'
    scheme: 'AHELine.UI'
    packageApp: true
    useXcpretty: false
    teamId: "65R5MW3X38" 
    exportTeamId: "65R5MW3X38"
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
    exportOptionsPlist: 'config/ExportOptions_prod.plist'
    args: '-verbose CODE_SIGNING_ALLOWED=No -allowProvisioningUpdates SKIP_INSTALL=YES'

- task: CopyFiles@2
  displayName: Копировать файл ipa
  inputs:
    SourceFolder: 'output/$(SDK)/$(Configuration)'
    Contents: '*.ipa'
    TargetFolder: '$(System.ArtifactsDirectory)/ipa'
    CleanTargetFolder: true
    OverWrite: true

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: 'output/$(SDK)/$(Configuration)'
    artifact: 'ipaRelease'
    publishLocation: 'pipeline'
  • Xcode@5 задача:
- task: Xcode@5
  inputs:
    actions: 'clean'
    configuration: 'Release'
    sdk: 'iphoneos'
    xcWorkspacePath: 'AheLine.xcworkspace'
    scheme: 'AHELine.UI'
    packageApp: true
    useXcpretty: false
    teamId: "65R5MW3X38" 
    exportTeamId: "65R5MW3X38"
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
    exportOptionsPlist: 'config/ExportOptions_prod.plist'
    args: '-verbose CODE_SIGNING_ALLOWED=No -allowProvisioningUpdates SKIP_INSTALL=YES'

Ошибка, которую я получаю:

** АРХИВ УСПЕШЕН **

##[warning]Не удалось автоматически определить метод экспорта, который следует использовать из архивного файла. Это может вызвать ошибки во время сборки или создать недопустимый пакет. Если экспорт не удался, либо включите подпись (установите `Стиль подписи` на `По умолчанию проекта`), либо настройте экспорт вручную (установите `Опции экспорта` на `Plist` или `Указать`).
/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist
Неизвестный тип: 
Файл не существует, будет создан: _XcodeTaskExportOptions.plist
Инициализация Plist...
/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist
/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist
/usr/bin/xcodebuild -exportArchive -archivePath /Users/runner/work/1/s/AHELine.UI.xcarchive -exportPath /Users/runner/work/1/s/output/iphoneos/Release -exportOptionsPlist _XcodeTaskExportOptions.plist
2024-11-05 15:23:35.750 xcodebuild[23499:76846] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Создана упаковка по пути "/var/folders/z0/m_s6x1rn5799ttl3khp8n86r0000gn/T/AHELine.UI_2024-11-05_15-23-35.746.xcdistributionlogs".
2024-11-05 15:23:35.890 xcodebuild[23499:76846] [MT] IDEDistribution: -[IDEDistributionMethodManager orderedDistributionMethodsForTask:archive:logAspect:]: Ошибка = Error Domain=IDEDistributionMethodManagerErrorDomain Code=2 "Неизвестная ошибка дистрибуции" UserInfo={NSLocalizedDescription=Неизвестная ошибка дистрибуции}
ошибка: exportArchive: exportOptionsPlist ошибка для ключа "method": ожидалось одно из {}, но найдено development

Error Domain=IDEFoundationErrorDomain Code=1 "exportOptionsPlist ошибка для ключа "method": ожидалось одно из {}, но найдено development" UserInfo={NSLocalizedDescription=exportOptionsPlist ошибка для ключа "method": ожидалось одно из {}, но найдено development}

** ЭКСПОРТ НЕ УДАЛСЯ **

=> Возможно ли исправить эту ошибку?

Связанный вопрос по инструменту xcodebuild: xcodebuild -exportArchive: ошибка exportOptionsPlist для ключа ‘method’: ожидалось одно из {}

Ответ или решение

Ошибка exportOptionsPlist в Azure DevOps: Решение проблемы с ключом ‘method’

Введение

В процессе выполнения сборки с использованием Azure DevOps и задачи Xcode@5 возникает ошибка, связанная с ключом method в файле exportOptionsPlist. Ошибка выглядит следующим образом:

Error Domain=IDEFoundationErrorDomain Code=1 "exportOptionsPlist error for key "method": expected one of {}, but found development"

Данная проблема вызвана неправильной конфигурацией exportOptionsPlist, так как Xcode не распознает указанный метод экспорта.

В чем причина ошибки?

Ключ method в exportOptionsPlist должен содержать допустимое значение, которое определяет способ распространения приложения. Ваша ошибка указывает на то, что используется значение development, которое не было признано. Наиболее вероятные значения для ключа method включают:

  • app-store – для распространения через App Store
  • ad-hoc – для распространения на устройства, не зарегистрированные в Apple Developer
  • enterprise – для корпоративного распространения
  • development – для разработки на устройствах, зарегистрированных в Apple Developer

Однако, полученная ошибка предполагает, что метод development не поддерживается в контексте выполнения заказа.

Как исправить ситуацию?

Для устранения описанной ошибки выполните несколько шагов:

  1. Проверьте содержимое exportOptionsPlist:
    Убедитесь, что файл ExportOptions_prod.plist, на который ссылается ваш пайплайн, содержит корректный ключ method со значением, приемлемым для вашего сценария. Например, если вы хотите создать Ad-Hoc сборку, ваш файл должен выглядеть примерно так:

    <?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>method</key>
       <string>ad-hoc</string>
       <key>teamID</key>
       <string>YOUR_TEAM_ID</string>
       <key>provisioningProfiles</key>
       <dict>
           <key>com.your.bundle.identifier</key>
           <string>Your Provisioning Profile Name</string>
       </dict>
       <key>signingStyle</key>
       <string>manual</string>
    </dict>
    </plist>

    Замените YOUR_TEAM_ID и com.your.bundle.identifier на соответствующие значения вашего проекта.

  2. Убедитесь, что ваше подписание соответствует указаниям:
    Проверьте, что вы используете правильные идентификаторы для signingIdentity и provisioningProfileUuid. Эти значения должны совпадать с теми, которые вы использовали при создании профиля подписания.

  3. Проверьте конфигурации вашего проекта:
    В настройках проекта Xcode убедитесь, что профиль подписания выбирается правильно и что вы используете включенную опцию manual для подписи.

  4. Тестирование в локальной среде:
    Попробуйте выполнить ту же команду xcodebuild -exportArchive локально на вашем Mac с использованием файла ExportOptions_prod.plist, чтобы проверить его корректность. Это поможет исключить дополнительные факторы, такие как некорректные версии Xcode или проблемы с конфигурацией среды CI/CD.

  5. Обновите документацию и версии инструментов:
    Убедитесь, что вы используете последнюю версию Xcode и Azure DevOps, так как иногда подобные проблемы могут быть связаны с устаревшими инструментами или изменениями в API.

Заключение

Ошибки, возникающие при использовании exportOptionsPlist, могут казаться сложными, однако, внимательное внимание к настройкам и правильная конфигурация ключей решают большинство вопросов. Если вы выполните предложенные шаги, ваша сборка должна пройти без ошибок. Если же проблемы сохраняются, стоит обратиться в службу поддержки Microsoft или к сообществу Xcode для дальнейшего анализа.

Оцените материал
Добавить комментарий

Капча загружается...