Конвейер Azure DevOps Flutter CI/CD для iOS и приложению watchOS не удается опубликовать в TestFlight ⇐ IOS
Конвейер Azure DevOps Flutter CI/CD для iOS и приложению watchOS не удается опубликовать в TestFlight
У меня есть существующий конвейер Azure DevOps для создания приложения Flutter для iOS. Это приложение включает в себя приложение Watch и расширение для приложения Watch.
Я использую подпись вручную с помощью сертификата распространения Apple (.p12) и трех профилей .mobileprovision (для основного приложения, Watchkit и расширения Watchkit).
Конвейер сборки создает файл IPA и начинает загружать его в TestFlight с помощью Fastlane.
Здесь мы получаем ошибку:
Ошибка: проверка актива не удалась. Неверный идентификатор подписи кода. Идентификатор «com.apple.WK» в вашей подписи кода для «Приложения» должен совпадать с его идентификатором пакета «com.org.app.watchkitapp». Вот код конвейера:
этапы: - этап: iOSStage бассейн: vmImage: 'macos-последний' зависит от: [] отображаемое имя: iOS вакансии: - работа: iOSJob отображаемое имя: iOS переменные: FLUTTER_XCODE_CODE_SIGN_IDENTITY: "" FLUTTER_XCODE_CODE_SIGNING_REQUIRED: НЕТ FLUTTER_XCODE_CODE_SIGNING_ALLOWED: НЕТ шаги: - задача: InstallAppleProvisioningProfile@1 displayName: Установить основной профиль подготовки приложения. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'baseapp_provisioning.mobileprovision' # Установите профиль обеспечения расширения WatchKit. - задача: InstallAppleProvisioningProfile@1 displayName: Установить профиль обеспечения расширения WatchKit. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'watchkitapp_provisioning.mobileprovision' # Установите профиль подготовки приложения WatchKit. - задача: InstallAppleProvisioningProfile@1 displayName: Установить профиль подготовки приложения WatchKit. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'watchkitextension_provisioning.mobileprovision' # замените «iosKey» и «yourPwd» на безопасное имя файла и пароль. - задача: УстановитьAppleCertificate@2 displayName: Установить сертификат входы: certSecureFile: 'apple_distribution.p12' certPwd: '$(PASS)' брелок: 'temp' setUpPartitionIdACLForPrivateKey: правда - задача: FlutterInstall@0 displayName: «Установить Flutter SDK» входы: режим: «авто» канал: 'стабильный' версия: «последняя» - задача: FlutterCommand@0 displayName: «Запустить диагностику Flutter» входы: ProjectDirectory: '.' аргументы: 'доктор -v' - сценарий: | установка драгоценных камней какаоподов # корректируем путь к файлу *.plist - задача: FlutterBuild@0 displayName: «Создать приложение» входы: цель: IPA projectDirectory: '$(Build.SourcesDirectory)' buildName: '$(Build.BuildNumber)' ExportOptionsPlist: 'ios/ExportOptions.plist' режим отладки: ложь Режим профиля: ложь многословный режим: правда - задача: CopyFiles@2 displayName: "Копировать приложение в промежуточный каталог" входы: sourceFolder: '$(Agent.BuildDirectory)' содержимое: '**/ipa/*.ipa' targetFolder: '$(Build.StagingDirectory)' FlattenFolders: правда - задача: PublishBuildArtifacts@1 displayName: "Опубликовать IPA-файл" входы: PathtoPublish: '$(Build.ArtifactStagingDirectory)' Имя Артефакта: 'IPA' publicLocation: «Контейнер» - задача: AppStoreRelease@1 displayName: "Опубликовать в треке TestFlight в App Store" входы: authType: 'ApiKey' apiKeyId: 'идентификатор какого-то ключа' apiKeyIssuerId: 'идентификатор какого-то эмитента' апитокен: 'base64-api-токен' ReleaseTrack: 'TestFlight' appIdentifier: 'com.org.app' Тип приложения: «iOS» ipaPath: '$(Build.ArtifactStagingDirectory)/**/*.ipa' должноSkipWaitingForProcessing: true должноSkipSubmission: true appSpecificId: '1234' TeamId: 'какой-то-идентификатор' TeamName: 'моя-команда' включено: правда таймаутИнминуты: 30 ретрикаунтонтаскфаилуре: 1 И ExportOptions.plist
компилировать биткод загрузить биткод загрузить символы stripSwiftSymbols ID команды SOME-TEAM-ID метод магазин приложений стиль подписи руководство подписной сертификат Распространение Apple: ORG (ORG_ID) Профили обеспечения com.org.app baseapp_provisioning com.org.app.watchkitapp watchkitapp_provisioning com.org.app.watchkitapp.watchkitextension watchkitextension_provisioning Я застрял на этой ошибке уже несколько дней и понятия не имею, где еще искать решение.
Я пытался создать различные типы сертификатов (.p12) и профили .mobileprovision. Я пробовал разные флаги для подписи в конвейере, но не могу избавиться от этой ошибки.
Я предполагаю, что проблема связана либо с настройками iOS (watchOS), ExportOptions, конвейером сборки DevOps, либо с сертификатами.
Если все будет работать, этот конвейер должен опубликовать файл IPA в TestFlight.
ОБНОВЛЕНИЕ:
Я исследовал дальше и, основываясь на этой ветке форума как пользователь @[wade zhou – предложил MSFT], я выполнил эти две команды для своего приложения iOS, приложения watchOS и расширения watchOS:
$ codesign -d -v My-App.app ... Идентификатор=com.myorg.My-App ... $ /usr/libexec/PlistBuddy -c "печать:CFBundleIdentifier" My-App.app/Info.plist com.myorg.My-App И получил такие результаты:
Приложение для iOS: кодовый дизайн: Identifier=com.myorg.My-App PlistBuddy: com.myorg.My-App Приложение WatchOS: кодовый дизайн: Идентификатор=com.apple.WK PlistBuddy: com.myorg.My-App.watchkitapp Расширение watchOS: кодовый знак: Identifier=com.myorg.My-App.watchkitapp.watchkitextension PlistBuddy: com.myorg.My-App.watchkitapp.watchkitextension Поэтому подпись приложения watchOS неверна и не соответствует подписи в Info.plist приложения watchOS. Я до сих пор не знаю почему.
У меня есть существующий конвейер Azure DevOps для создания приложения Flutter для iOS. Это приложение включает в себя приложение Watch и расширение для приложения Watch.
Я использую подпись вручную с помощью сертификата распространения Apple (.p12) и трех профилей .mobileprovision (для основного приложения, Watchkit и расширения Watchkit).
Конвейер сборки создает файл IPA и начинает загружать его в TestFlight с помощью Fastlane.
Здесь мы получаем ошибку:
Ошибка: проверка актива не удалась. Неверный идентификатор подписи кода. Идентификатор «com.apple.WK» в вашей подписи кода для «Приложения» должен совпадать с его идентификатором пакета «com.org.app.watchkitapp». Вот код конвейера:
этапы: - этап: iOSStage бассейн: vmImage: 'macos-последний' зависит от: [] отображаемое имя: iOS вакансии: - работа: iOSJob отображаемое имя: iOS переменные: FLUTTER_XCODE_CODE_SIGN_IDENTITY: "" FLUTTER_XCODE_CODE_SIGNING_REQUIRED: НЕТ FLUTTER_XCODE_CODE_SIGNING_ALLOWED: НЕТ шаги: - задача: InstallAppleProvisioningProfile@1 displayName: Установить основной профиль подготовки приложения. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'baseapp_provisioning.mobileprovision' # Установите профиль обеспечения расширения WatchKit. - задача: InstallAppleProvisioningProfile@1 displayName: Установить профиль обеспечения расширения WatchKit. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'watchkitapp_provisioning.mobileprovision' # Установите профиль подготовки приложения WatchKit. - задача: InstallAppleProvisioningProfile@1 displayName: Установить профиль подготовки приложения WatchKit. входы: ProvisioningProfileLocation: 'secureFiles' provProfileSecureFile: 'watchkitextension_provisioning.mobileprovision' # замените «iosKey» и «yourPwd» на безопасное имя файла и пароль. - задача: УстановитьAppleCertificate@2 displayName: Установить сертификат входы: certSecureFile: 'apple_distribution.p12' certPwd: '$(PASS)' брелок: 'temp' setUpPartitionIdACLForPrivateKey: правда - задача: FlutterInstall@0 displayName: «Установить Flutter SDK» входы: режим: «авто» канал: 'стабильный' версия: «последняя» - задача: FlutterCommand@0 displayName: «Запустить диагностику Flutter» входы: ProjectDirectory: '.' аргументы: 'доктор -v' - сценарий: | установка драгоценных камней какаоподов # корректируем путь к файлу *.plist - задача: FlutterBuild@0 displayName: «Создать приложение» входы: цель: IPA projectDirectory: '$(Build.SourcesDirectory)' buildName: '$(Build.BuildNumber)' ExportOptionsPlist: 'ios/ExportOptions.plist' режим отладки: ложь Режим профиля: ложь многословный режим: правда - задача: CopyFiles@2 displayName: "Копировать приложение в промежуточный каталог" входы: sourceFolder: '$(Agent.BuildDirectory)' содержимое: '**/ipa/*.ipa' targetFolder: '$(Build.StagingDirectory)' FlattenFolders: правда - задача: PublishBuildArtifacts@1 displayName: "Опубликовать IPA-файл" входы: PathtoPublish: '$(Build.ArtifactStagingDirectory)' Имя Артефакта: 'IPA' publicLocation: «Контейнер» - задача: AppStoreRelease@1 displayName: "Опубликовать в треке TestFlight в App Store" входы: authType: 'ApiKey' apiKeyId: 'идентификатор какого-то ключа' apiKeyIssuerId: 'идентификатор какого-то эмитента' апитокен: 'base64-api-токен' ReleaseTrack: 'TestFlight' appIdentifier: 'com.org.app' Тип приложения: «iOS» ipaPath: '$(Build.ArtifactStagingDirectory)/**/*.ipa' должноSkipWaitingForProcessing: true должноSkipSubmission: true appSpecificId: '1234' TeamId: 'какой-то-идентификатор' TeamName: 'моя-команда' включено: правда таймаутИнминуты: 30 ретрикаунтонтаскфаилуре: 1 И ExportOptions.plist
компилировать биткод загрузить биткод загрузить символы stripSwiftSymbols ID команды SOME-TEAM-ID метод магазин приложений стиль подписи руководство подписной сертификат Распространение Apple: ORG (ORG_ID) Профили обеспечения com.org.app baseapp_provisioning com.org.app.watchkitapp watchkitapp_provisioning com.org.app.watchkitapp.watchkitextension watchkitextension_provisioning Я застрял на этой ошибке уже несколько дней и понятия не имею, где еще искать решение.
Я пытался создать различные типы сертификатов (.p12) и профили .mobileprovision. Я пробовал разные флаги для подписи в конвейере, но не могу избавиться от этой ошибки.
Я предполагаю, что проблема связана либо с настройками iOS (watchOS), ExportOptions, конвейером сборки DevOps, либо с сертификатами.
Если все будет работать, этот конвейер должен опубликовать файл IPA в TestFlight.
ОБНОВЛЕНИЕ:
Я исследовал дальше и, основываясь на этой ветке форума как пользователь @[wade zhou – предложил MSFT], я выполнил эти две команды для своего приложения iOS, приложения watchOS и расширения watchOS:
$ codesign -d -v My-App.app ... Идентификатор=com.myorg.My-App ... $ /usr/libexec/PlistBuddy -c "печать:CFBundleIdentifier" My-App.app/Info.plist com.myorg.My-App И получил такие результаты:
Приложение для iOS: кодовый дизайн: Identifier=com.myorg.My-App PlistBuddy: com.myorg.My-App Приложение WatchOS: кодовый дизайн: Идентификатор=com.apple.WK PlistBuddy: com.myorg.My-App.watchkitapp Расширение watchOS: кодовый знак: Identifier=com.myorg.My-App.watchkitapp.watchkitextension PlistBuddy: com.myorg.My-App.watchkitapp.watchkitextension Поэтому подпись приложения watchOS неверна и не соответствует подписи в Info.plist приложения watchOS. Я до сих пор не знаю почему.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Конвейер Azure не работает при попытке загрузить приложение iOS в testflight
Anonymous » » в форуме IOS - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Конвейер Azure не работает при попытке загрузить приложение iOS в testflight
Anonymous » » в форуме IOS - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-