You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Pipeline部署iOS与WatchOS扩展至TestFlight遇配置错误

问题:Azure DevOps部署带WatchOS扩展的iOS应用到TestFlight失败

尝试通过Azure DevOps Pipeline部署包含WatchOS应用扩展的iPhone应用至TestFlight,无扩展时部署流程正常,添加扩展后触发以下错误:

❌ error: Provisioning profile "watchkit-beta-extension-appstore" has app ID "dev.app.watchkitapp.watchkitextension", which does not match the bundle ID "dev.app.watchkitapp". (in target 'Watch' from project 'PORJECT_NAME')

原Pipeline YAML配置如下:

trigger:
- develop

pool:
  vmImage: 'macos-latest'

variables:
  - group: iOS-build-variables

steps:

# CocoaPods
# Install CocoaPods dependencies for Swift and Objective-C Cocoa projects
- task: CocoaPods@0
  inputs:
    forceRepoUpdate: false

- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: 'Distribution_Certificates.p12'
    certPwd: '$(key.appCertificatePassword)'
    keychain: 'temp'

- task: InstallAppleProvisioningProfile@1
  displayName: 'Install MainTarget provisioning profile'
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'beta_appstore_profile.mobileprovision'

- task: InstallAppleProvisioningProfile@1
  displayName: 'Install Watch app provisioning profile'
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'watchkit-beta-appstore.mobileprovision'

- task: InstallAppleProvisioningProfile@1
  displayName: 'Install Watch extension app provisioning profile'
  inputs:
    provisioningProfileLocation: 'secureFiles'
    provProfileSecureFile: 'watchkit-beta-extension-appstore.mobileprovision'

- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: '$(key.devrelease.scheme)'
    sdk: 
    configuration: '$(key.devrelease.configuration)'
    xcWorkspacePath: 'PORJECT_NAME.xcworkspace'
    xcodeVersion: 'default' # Options: 8, 9, 10, 11, 12, default, specifyPath
    signingOption: 'manual'
    packageApp: true
    signingIdentity: $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
    provisioningProfileUuid: $(APPLE_PROV_PROFILE_UUID)
   
- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
    overWrite: true
    flattenFolders: true

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(build.artifactStagingDirectory)'
    artifactName: 'drop'
    publishLocation: 'Container'

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'AppleStoreServiceConnection'
    appIdentifier: '$(key.devrelease.appPackageName)'
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    installFastlane: false
    releaseTrack: 'TestFlight'

解决方案

错误根源是当前Xcode任务为所有目标(主App、Watch App、Watch Extension)指定了同一个provisioningProfileUuid,导致签名配置与目标Bundle ID不匹配。需为每个目标单独配置对应的签名文件,推荐两种实现方式:

方式一:通过Xcode任务参数指定多目标签名

  1. 在iOS-build-variables变量组中添加三个变量,分别对应三个配置文件的UUID:

    • MAIN_PROV_PROFILE_UUID:主App配置文件UUID
    • WATCH_APP_PROV_PROFILE_UUID:Watch App配置文件UUID
    • WATCH_EXT_PROV_PROFILE_UUID:Watch Extension配置文件UUID
  2. 修改Xcode@5任务,移除provisioningProfileUuid参数,改用args为每个目标指定对应配置:

- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: '$(key.devrelease.scheme)'
    configuration: '$(key.devrelease.configuration)'
    xcWorkspacePath: 'PORJECT_NAME.xcworkspace'
    xcodeVersion: 'default'
    signingOption: 'manual'
    packageApp: true
    signingIdentity: $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
    args: >
      -target "PORJECT_NAME" PROVISIONING_PROFILE="$(MAIN_PROV_PROFILE_UUID)"
      -target "Watch" PROVISIONING_PROFILE="$(WATCH_APP_PROV_PROFILE_UUID)"
      -target "Watch Extension" PROVISIONING_PROFILE="$(WATCH_EXT_PROV_PROFILE_UUID)"
      OTHER_CODE_SIGN_FLAGS="--keychain $(APPLE_CERTIFICATE_KEYCHAIN)"

方式二:使用ExportOptions.plist配置签名

  1. 在项目根目录创建ExportOptions.plist文件,配置各目标的签名信息(替换YOUR_TEAM_ID为实际团队ID):
<?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>app-store</string>
    <key>teamID</key>
    <string>YOUR_TEAM_ID</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>dev.app.watchkitapp</key>
        <string>beta_appstore_profile</string>
        <key>dev.app.watchkitapp.watchkitapp</key>
        <string>watchkit-beta-appstore</string>
        <key>dev.app.watchkitapp.watchkitextension</key>
        <string>watchkit-beta-extension-appstore</string>
    </dict>
</dict>
</plist>
  1. 修改Xcode@5任务,移除provisioningProfileUuid参数,添加exportOptionsPlist指定配置文件:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: '$(key.devrelease.scheme)'
    configuration: '$(key.devrelease.configuration)'
    xcWorkspacePath: 'PORJECT_NAME.xcworkspace'
    xcodeVersion: 'default'
    signingOption: 'manual'
    packageApp: true
    signingIdentity: $(APPLE_CERTIFICATE_SIGNING_IDENTITY)
    exportOptionsPlist: 'ExportOptions.plist'

内容的提问来源于stack exchange,提问作者Sadanand lowanshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:01:17