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任务参数指定多目标签名
在
iOS-build-variables变量组中添加三个变量,分别对应三个配置文件的UUID:MAIN_PROV_PROFILE_UUID:主App配置文件UUIDWATCH_APP_PROV_PROFILE_UUID:Watch App配置文件UUIDWATCH_EXT_PROV_PROFILE_UUID:Watch Extension配置文件UUID
修改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配置签名
- 在项目根目录创建
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>
- 修改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
相关产品推荐
相关产品推荐

