Azure DevOps Pipeline中Xcode自动签名归档失败求助
Azure Pipeline Xcode归档代码签名错误解决方案
问题背景
搭建CI/CD流水线实现iOS应用归档并上传TestFlight时,执行Xcode归档操作持续触发代码签名错误。已在YAML中配置自动签名,但Azure Pipeline的Xcode环境因未关联Apple开发者账号导致报错。
错误信息
Using default simulator: iPhone 7. /usr/bin/xcodebuild -version Xcode 15.2 Build version 15C500b /usr/bin/xcodebuild -sdk iphoneos -configuration Debug -workspace /Users/runner/work/1/s/xxxxx.xcworkspace -scheme xxxxxx -destination platform=ios Simulator,name=iPhone 7 archive -verbose -allowProvisioningUpdates CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=xxxxxxx Command line invocation: /Applications/Xcode_15.2.app/Contents/Developer/usr/bin/xcodebuild -sdk iphoneos -configuration Debug -workspace /Users/runner/work/1/s/xxxxxx.xcworkspace -scheme xxxxx -destination \"platform=ios Simulator,name=iPhone 7\" archive -verbose -allowProvisioningUpdates CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=xxxxxxxx User defaults from command line: IDEPackageSupportUseBuiltinSCM = YES Build settings from command line: CODE_SIGN_STYLE = Automatic DEVELOPMENT_TEAM = xxxxxxx SDKROOT = iphoneos17.2 --- xcodebuild: WARNING: Using the first of multiple matching destinations: { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device } { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device } ...(模拟器列表省略) /Users/runner/work/1/s/xxxxxx.xcodeproj: error: No Accounts: Add a new account in Accounts settings. (in target 'xxxxx' from project 'xxxxx') /Users/runner/work/1/s/xxxxxx.xcodeproj: error: No profiles for 'xxxxxxx.xxx.xxx.xx' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'xxxxxxx.xxx.xxx.xx'. (in target 'xxxxxx' from project 'xxxxx')
现有Pipeline YAML配置
trigger: - development pool: vmImage: 'macos-13' jobs: - job: iOS steps: - checkout: self submodules: true persistCredentials : true - task: UseRubyVersion@0 inputs: versionSpec: '>=2.6' addToPath: true - task: Cache@2 inputs: key: 'pods | "$(Agent.OS)" | Podfile.lock' path: 'Pods' cacheHitVar: 'PODS_CACHE_RESTORED' - task: CocoaPods@0 displayName: 'pod install using the CocoaPods task with defaults' condition: ne(variables.PODS_CACHE_RESTORED, 'true') inputs: forceRepoUpdate: false - task: Xcode@5 inputs: actions: 'clean' xcWorkspacePath: 'xxxxx.xcworkspace' scheme: '$(SCHEME)' displayName: Clean Build - task: Xcode@5 inputs: actions: 'build' sdk: $(SDK) scheme: $(SCHEME) signingOption: 'auto' teamId: $(TEAMID) packageApp: false destinationPlatformOption: 'ios' configuration: $(CONFIGURATION) xcWorkspacePath: 'xxxx.xcworkspace' destinationSimulators: 'iPhone 15' args: '-verbose' useXcpretty: false env: PODS_ROOT: '$(Build.SourcesDirectory)/Pods' PODS_XCFRAMEWORKS_BUILD_DIR: '$(Build.BinariesDirectory)/xcframeworks' - task: Xcode@5 inputs: actions: 'archive' configuration: '$(CONFIGURATION)' xcWorkspacePath: 'xxxxx.xcworkspace' scheme: '$(SCHEME)' packageApp: true archivePath: '$(Build.BinariesDirectory)/archive.xcarchive' exportPath: '$(Build.BinariesDirectory)/exported' signingOption: 'auto' teamId: '$(TEAMID)' destinationPlatformOption: 'ios' args: '-verbose -allowProvisioningUpdates' useXcpretty: false env: PODS_ROOT: '$(Build.SourcesDirectory)/Pods' PODS_XCFRAMEWORKS_BUILD_DIR: '$(Build.BinariesDirectory)/xcframeworks'
(注:已修正原YAML中args的多余引号和archivePath的路径错误)
错误原因
Azure Pipeline使用的macOS虚拟机是全新的干净环境,未登录任何Apple开发者账号。Xcode的自动签名功能需要账号权限来自动生成/拉取对应的Provisioning Profile,仅设置CODE_SIGN_STYLE=Automatic和DEVELOPMENT_TEAM无法完成权限验证。
解决方案
方案1:使用Apple服务连接实现自动签名(推荐)
创建Apple服务连接
- 进入Azure DevOps项目设置 → 服务连接 → 新建服务连接
- 选择「Apple Developer」类型,按提示配置:
- 可选方式1:使用Apple ID和密码(需开启两步验证的App专用密码)
- 可选方式2:使用App Store Connect API密钥(更安全,无需账号密码,推荐)
- 保存服务连接,记录连接名称
修改Xcode归档任务配置
在归档任务中添加connectedServiceName字段,指定刚创建的服务连接名称:- task: Xcode@5 inputs: actions: 'archive' configuration: '$(CONFIGURATION)' xcWorkspacePath: 'xxxxx.xcworkspace' scheme: '$(SCHEME)' packageApp: true archivePath: '$(Build.BinariesDirectory)/archive.xcarchive' exportPath: '$(Build.BinariesDirectory)/exported' signingOption: 'auto' teamId: '$(TEAMID)' connectedServiceName: '你的Apple服务连接名称' # 添加此行 destinationPlatformOption: 'ios' args: '-verbose -allowProvisioningUpdates' useXcpretty: false env: PODS_ROOT: '$(Build.SourcesDirectory)/Pods' PODS_XCFRAMEWORKS_BUILD_DIR: '$(Build.BinariesDirectory)/xcframeworks'此配置会让Pipeline自动使用服务连接登录Xcode,完成权限验证并自动管理配置文件。
方案2:手动安装证书与配置文件
若不想使用服务连接,可手动上传证书和配置文件到Azure DevOps安全库,再在Pipeline中安装:
- 上传安全文件
- 进入Azure DevOps项目设置 → 安全文件 → 上传你的开发者证书(.p12格式)和对应的Provisioning Profile(.mobileprovision格式)
- 添加安装任务
在Xcode归档任务前添加证书和配置文件安装步骤:# 安装开发者证书 - task: InstallAppleCertificate@2 inputs: certSecureFile: '你的证书文件名.p12' certPwd: '$(CERT_PASSWORD)' # 证书密码,建议存为Pipeline变量 keychain: 'temp' # 安装Provisioning Profile - task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: '你的配置文件名.mobileprovision' - 修改Xcode任务签名选项
将Xcode任务的signingOption改为manual,并指定证书和配置文件信息:- task: Xcode@5 inputs: actions: 'archive' configuration: '$(CONFIGURATION)' xcWorkspacePath: 'xxxxx.xcworkspace' scheme: '$(SCHEME)' packageApp: true archivePath: '$(Build.BinariesDirectory)/archive.xcarchive' exportPath: '$(Build.BinariesDirectory)/exported' signingOption: 'manual' # 改为手动签名 signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)' # 由InstallAppleCertificate任务自动设置的变量 provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)' # 由InstallAppleProvisioningProfile任务自动设置的变量 destinationPlatformOption: 'ios' args: '-verbose' useXcpretty: false env: PODS_ROOT: '$(Build.SourcesDirectory)/Pods' PODS_XCFRAMEWORKS_BUILD_DIR: '$(Build.BinariesDirectory)/xcframeworks'
内容的提问来源于stack exchange,提问作者Chirag Shah
相关产品推荐
相关产品推荐

