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

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服务连接实现自动签名(推荐)

  1. 创建Apple服务连接

    • 进入Azure DevOps项目设置 → 服务连接 → 新建服务连接
    • 选择「Apple Developer」类型,按提示配置:
      • 可选方式1:使用Apple ID和密码(需开启两步验证的App专用密码)
      • 可选方式2:使用App Store Connect API密钥(更安全,无需账号密码,推荐)
    • 保存服务连接,记录连接名称
  2. 修改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中安装:

  1. 上传安全文件
    • 进入Azure DevOps项目设置 → 安全文件 → 上传你的开发者证书(.p12格式)和对应的Provisioning Profile(.mobileprovision格式)
  2. 添加安装任务
    在Xcode归档任务前添加证书和配置文件安装步骤:
    # 安装开发者证书
    - task: InstallAppleCertificate@2
      inputs:
        certSecureFile: '你的证书文件名.p12'
        certPwd: '$(CERT_PASSWORD)' # 证书密码,建议存为Pipeline变量
        keychain: 'temp'
    
    # 安装Provisioning Profile
    - task: InstallAppleProvisioningProfile@1
      inputs:
        provProfileSecureFile: '你的配置文件名.mobileprovision'
    
  3. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:17:02