Вопрос или проблема
Я пытаюсь запустить конвейер 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 Storead-hoc
– для распространения на устройства, не зарегистрированные в Apple Developerenterprise
– для корпоративного распространенияdevelopment
– для разработки на устройствах, зарегистрированных в Apple Developer
Однако, полученная ошибка предполагает, что метод development
не поддерживается в контексте выполнения заказа.
Как исправить ситуацию?
Для устранения описанной ошибки выполните несколько шагов:
-
Проверьте содержимое 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
на соответствующие значения вашего проекта. -
Убедитесь, что ваше подписание соответствует указаниям:
Проверьте, что вы используете правильные идентификаторы для signingIdentity и provisioningProfileUuid. Эти значения должны совпадать с теми, которые вы использовали при создании профиля подписания. -
Проверьте конфигурации вашего проекта:
В настройках проекта Xcode убедитесь, что профиль подписания выбирается правильно и что вы используете включенную опцию manual для подписи. -
Тестирование в локальной среде:
Попробуйте выполнить ту же командуxcodebuild -exportArchive
локально на вашем Mac с использованием файлаExportOptions_prod.plist
, чтобы проверить его корректность. Это поможет исключить дополнительные факторы, такие как некорректные версии Xcode или проблемы с конфигурацией среды CI/CD. -
Обновите документацию и версии инструментов:
Убедитесь, что вы используете последнюю версию Xcode и Azure DevOps, так как иногда подобные проблемы могут быть связаны с устаревшими инструментами или изменениями в API.
Заключение
Ошибки, возникающие при использовании exportOptionsPlist
, могут казаться сложными, однако, внимательное внимание к настройкам и правильная конфигурация ключей решают большинство вопросов. Если вы выполните предложенные шаги, ваша сборка должна пройти без ошибок. Если же проблемы сохраняются, стоит обратиться в службу поддержки Microsoft или к сообществу Xcode для дальнейшего анализа.