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

Azure DevOps Xcode@5 Release构建卡[CP] Check Pods Manifest.lock

问题根因

日志中抛出的System.OperationCanceledException是任务挂起超时后,Azure DevOps流水线主动取消步骤抛出的上层错误,并非[CP] Check Pods Manifest.lock脚本本身的执行报错。仅Release构建触发卡死、UAT配置构建正常,本质是不同scheme的构建配置差异导致,核心触发点有三类:

  • Release对应scheme(MyProject_PROD_Release)的Target构建阶段中,[CP] Check Pods Manifest.lock脚本开启了「基于依赖分析执行」选项,但脚本的输入输出路径配置错误,Xcode增量构建机制会一直等待不存在的输出文件,进入永久挂起状态直到超时。
  • Xcode@5任务默认开启xcodebuild并行编译,1.10版本以下的CocoaPods生成的Manifest检查脚本未做并发锁兼容,多编译线程同时读写锁文件时会触发死锁。UAT配置编译资源占用更低,未触发并发冲突因此可正常完成构建。
  • CI环境执行Release构建时,工作目录被xcodebuild切换到DerivedData临时路径,Check脚本找不到Podfile.lock和Pods/Manifest.lock文件,脚本内置的文件等待逻辑无超时退出机制,直接卡死。
排查步骤

按以下顺序排查可快速定位问题:

  • 本地复现验证:在开发机执行和CI完全一致的构建命令,复现卡死问题:
    xcodebuild clean build -workspace MyProject.xcworkspace -scheme MyProject_PROD_Release -configuration RELEASE -sdk <对应sdk参数值>
    
    如果本地同样卡死,直接打开Xcode进入PROD target的Build Phases配置,找到[CP] Check Pods Manifest.lock脚本,取消勾选Based on dependency analysis选项,重新执行pod deintegrate && pod install后再试。
  • 检查CocoaPods版本:在CI构建机执行pod --version,如果版本低于1.10,先升级到1.11以上稳定版本,低版本CocoaPods对Xcode 13+的并行构建、CI无交互环境的兼容存在已知问题。
  • 验证文件路径权限:在Xcode构建任务前加一行脚本执行ls -la Podfile.lock Pods/Manifest.lock,确认两个锁文件存在,且构建服务账号对文件有读权限,排除路径切换、权限不足导致的脚本卡死。
修复方案
  1. 先在Xcode构建任务前增加CocoaPods安装步骤,显式执行全量安装,避免增量安装带来的配置不一致:
    - script: |
        sudo gem install cocoapods -v 1.14.3 --no-document
        pod deintegrate
        pod install --repo-update
      displayName: 'Install CocoaPods Dependencies'
    
  2. 调整Xcode@5任务配置,关闭默认的并行构建优化、关闭xcodebuild格式化输出(该功能会吞掉脚本执行日志,不利于排查问题),修正后的配置如下:
    - task: Xcode@5
      displayName: 'Xcode Build'
      continueOnError: ${{ parameters.CanContinue }}
      inputs:
        actions: 'clean build'
        ${{ if eq(variables['configuration'], 'DEBUG' ) }}:
          scheme: 'MyProject_UAT_Debug'
        ${{ if eq(variables['configuration'], 'UAT' ) }}:
          scheme: 'MyProject_UAT_Release'
        ${{ if eq(variables['configuration'], 'RELEASE' ) }}:
          scheme: 'MyProject_PROD_Release'
        sdk: '$(sdk)'
        configuration: $(configuration)
        xcWorkspacePath: 'MyProject.xcworkspace'
        xcodeVersion: 'default'
        packageApp: true
        signingOption: 'manual'
        provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
        signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
        exportPath: '$(agent.buildDirectory)/output/$(sdk)/$(configuration)'
        # 新增配置解决卡死问题
        useXcodebuildFormatter: false
        arguments: '-parallelizeTargets=NO -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4'
    
  3. 临时验证方案:如果需要快速验证后续构建流程是否正常,可在Xcode任务的arguments中加入PODS_SKIP_MANIFEST_CHECK=YES临时跳过Manifest锁检查,确认后续流程无问题后再移除该参数,重新生成CocoaPods配置彻底修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:03:28