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
相关产品推荐
相关产品推荐

