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

Jenkins运行Fastlane报[CP] Embed Pods Frameworks归档错误

Jenkins环境Fastlane归档卡在[CP] Embed Pods Frameworks阶段修复方案

本地/虚拟Mac可正常构建、仅Jenkins环境触发报错,说明项目业务代码、Pods基础集成逻辑无硬伤,问题根源是Jenkins运行环境和本地交互式登录用户的环境配置差异,按以下优先级排查修复:

1. 修复执行权限与架构不匹配问题

你已经尝试过用arch -x86_64 pod install重装Pods,但Jenkins任务默认不会自动继承Rosetta转译配置,且Jenkins运行用户对Pods目录下的脚本可能没有可执行权限:

  • 在Jenkins构建步骤的最开头,执行Fastlane命令前先跑以下命令:
    # 递归给Pods目录下所有脚本添加可执行权限
    chmod -R +x ./Pods
    # 显式指定x86_64架构更新Pods,适配M系列芯片Mac上安装的Intel版CocoaPods
    arch -x86_64 pod install --repo-update
    
  • 如果Jenkins agent是通过LaunchAgent配置的开机自启服务,需要检查启动plist的架构配置,避免服务默认用arm64启动、但CocoaPods/Xcode命令行工具为x86版本导致的执行格式错误。

2. 关闭Xcode脚本沙盒限制

Xcode 14及以上版本默认开启用户脚本沙盒,CI环境下会直接拦截Pods脚本访问系统框架、签名资源的权限,是该报错的最高频诱因:

  • 打开项目Podfile,在文件末尾添加如下post_install钩子,修改完重新执行pod install:
    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          # 关闭用户脚本沙盒,允许Embed Pods等脚本正常访问依赖资源
          config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO'
          # 排除模拟器编译下的arm64架构,避免架构不匹配导致的脚本执行失败
          config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
        end
      end
    end
    

3. 修正Fastlane配置错误

你当前的Fastfile、环境变量配置存在几处会直接导致归档失败的问题:

  • gym未指定workspace:集成CocoaPods后必须通过xcworkspace构建,不能直接编译xcodeproj,在gym配置块中新增workspace参数,同时修正错误的configuration配置:
    gym(
      workspace: ENV["APP_WORKSPACE"], # 必须显式传入workspace路径
      scheme: app_schema,
      output_name: output_name,
      clean: true,
      configuration: "Release", # 原配置传了app_schema(值为Fastlane),不是合法的构建配置名,固定为Release
      export_options: {
        method: export_method,
        provisioningProfiles: {
          app_identifier => profile_name
        },
        compileBitcode: compile_bitcode,
        # 路径包含空格时必须用单引号包裹,避免参数截断
        xcargs: "ASSETCATALOG_COMPILER_APPICON_NAME='./Fastlane/Fastlane/Image Assest/Fastlane.xcassets/AppIcon.appiconset'",
        codesigning_identity: app_certificate,
      }
    )
    
  • keychain参数名不匹配:你在.env中配置的变量是FASTLANE_KEYCHAIN_PATH,但cert调用时读取的是KEYCHAIN_PATH,变量名不匹配会导致证书加载失败,间接触发签名阶段报错,修改cert配置如下:
    cert(
      api_key: api_key,
      keychain_path: ENV["FASTLANE_KEYCHAIN_PATH"],
      keychain_password: ENV["FASTLANE_KEYCHAIN_PASSWORD"] # 显式传入钥匙串密码,避免CI环境下弹授权框卡住
    )
    
  • 环境变量格式错误:你当前的.env.default文件中所有字符串都用了中文全角引号“”,且部分等号两侧存在多余空格,会导致环境变量读取时把引号、空格带入参数值,触发路径匹配、ID校验失败,需要把所有全角引号替换为英文半角引号"",删除等号两侧的多余空格。

4. 提前解锁Jenkins环境钥匙串

Jenkins运行在非交互式会话下,访问钥匙串中的签名证书时不会自动弹出授权框,会直接导致签名失败:

  • 在构建步骤最开头添加钥匙串解锁命令:
    security unlock-keychain -p "你的钥匙串密码" /Users/jenkins/Library/Keychains/login.keychain-db
    # 给codesign工具授予钥匙串访问权限,避免签名时弹授权
    security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "你的钥匙串密码" /Users/jenkins/Library/Keychains/login.keychain-db
    

如果以上步骤执行完仍报错,可以临时在gym配置中添加xcpretty_output: 'standard'参数,输出完整的构建日志,定位[CP] Embed Pods Frameworks脚本具体的报错行再针对性处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:54:21