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

Azure Pipelines iOS CI添加use_frameworks!报xcodebuild返回码65错误

Azure Pipeline Xcode构建[CP] Copy dSYMs报错(返回码65)修复方案

问题场景

使用微软托管macos-latest代理搭建iOS CI流程,为压缩构建时长配置CocoaPods缓存,Podfile添加use_frameworks!后构建失败,报错信息如下:

> The following build commands failed:
> 
> PhaseScriptExecution [CP]\ Copy\ dSYMs
> /Users/runner/Library/Developer/Xcode/DerivedData/.../Build/Intermediates.noindex/Pods.build/Release-iphoneos/nanopb.build/Script-46EB2E00016410.sh
> (in target 'nanopb' from project 'Pods')
> 
> PhaseScriptExecution [CP]\ Copy\ dSYMs
> /Users/runner/Library/Developer/Xcode/DerivedData/.../Build/Intermediates.noindex/Pods.build/Release-iphoneos/libwebp.build/Script-46EB2E00016400.sh
> (in target 'libwebp' from project 'Pods')
> 
> (2 failures)
> 
> ##[error]Error: /usr/bin/xcodebuild failed with return code: 65

报错核心是nanopb、libwebp两个静态类Pod依赖的dSYM拷贝脚本执行失败:开启use_frameworks!后CocoaPods会为所有Pod目标添加Copy dSYMs脚本,脚本默认开启严格错误检查,只要预期路径下找不到dSYM文件就会终止构建,通常和缓存配置不合理、静态库dSYM生成配置不匹配有关。

可落地修复方案(按优先级排序)

  • 修正CocoaPods缓存配置
    不要缓存DerivedData下的Pods编译中间产物(包括历史dSYM文件),这类产物和当前代理环境的Xcode版本、构建配置强绑定,跨次构建命中旧缓存非常容易触发路径不匹配错误。缓存范围仅保留Pods/源码目录即可,缓存key必须绑定Podfile.lock哈希、Xcode版本、use_frameworks!开关状态,避免不同配置下的缓存混用。
    Azure Pipeline Cache任务参考配置:

    - task: Cache@2
      inputs:
        key: 'cocoapods | macos-latest | $(Agent.OS) | Podfile.lock | $(Xcode.Version) | use_frameworks_enabled'
        path: 'Pods/'
        cacheHitVar: PODS_CACHE_RESTORED
    - script: pod install --no-repo-update
      displayName: 'Install CocoaPods Dependencies'
      condition: ne(variables.PODS_CACHE_RESTORED, 'true')
    

    该配置下仅跳过pod install和依赖源码拉取流程,Pods编译走Xcode原生增量编译,可压缩70%以上的构建时长,同时避免中间产物缓存带来的兼容性问题。

  • 修改Podfile配置,跳过静态依赖的dSYM生成
    nanopb、libwebp都是无业务符号价值的第三方静态依赖,不需要生成独立dSYM文件,在Podfile末尾添加如下post_install钩子,调整对应目标的编译配置,从根源上避免dSYM拷贝脚本找不到文件的问题:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          # 针对报错的两个静态库关闭独立dSYM生成
          if ['nanopb', 'libwebp'].include? target.name
            config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf'
          end
        end
      end
    end
    

    修改完成后本地执行pod install,将更新后的Podfile.lock提交到代码仓库即可。

  • 构建参数添加dSYM脚本错误忽略开关
    如果前两步配置后仍偶发报错,可以在Xcode构建任务的附加参数中添加DISABLE_DSYM_SCRIPT_ERRORS=YES,该参数会让CocoaPods生成的Copy dSYMs脚本跳过文件不存在类的非致命错误,不会影响主应用Target的dSYM生成和后续符号化能力。
    xcodebuild命令参考片段:

    xcodebuild -workspace YourApp.xcworkspace -scheme YourAppScheme -configuration Release -sdk iphoneos DISABLE_DSYM_SCRIPT_ERRORS=YES
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:03:24