M1芯片设备升级Xcode13后非Release配置下Pod构建及预编译头失败
问题诱因
- CocoaPods 1.11.x版本在M1架构设备上对自定义构建配置的适配存在缺陷,你的QA Scheme关联的Debug配置未被Pods项目正确识别,导致构建时跳过了Debug版本Pods依赖的编译,仅生成了Release版本的构建产物。
- Podfile中post_install脚本全局强制所有构建配置的
ONLY_ACTIVE_ARCH为YES,Release配置下该设置会导致依赖库仅编译当前设备架构,同时Debug构建时若依赖库未适配M1 arm64模拟器架构,会直接构建失败不生成对应产物。 - 旧版本第三方依赖未适配M1 arm64模拟器架构,Xcode默认在Debug模式下优先编译当前设备的arm64架构,依赖库构建失败后不会生成Debug对应的构建目录。
解决方案
按以下步骤操作即可修复该问题:
- 第一步:清理本地缓存和旧的Pods配置
打开终端在项目根目录执行以下命令:rm -rf ~/Library/Developer/Xcode/DerivedData/* pod deintegrate rm -rf Pods Podfile.lock - 第二步:修改Podfile的post_install脚本
将原有post_install代码替换为以下内容,区分不同构建配置的参数,同时添加M1模拟器适配:post_install do |pi| pi.pods_project.targets.each do |t| t.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' # Debug仅编译当前架构提升编译速度,Release编译全架构保证兼容性 config.build_settings["ONLY_ACTIVE_ARCH"] = config.name == 'Debug' ? "YES" : "NO" # 排除模拟器的arm64架构要求,适配M1设备 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end # 主动添加Debug配置到Pods项目,避免配置丢失 unless pi.pods_project.build_configurations.map(&:name).include?('Debug') pi.pods_project.add_build_configuration('Debug', :debug) end end - 第三步:重新安装依赖
M1设备不需要用Rosetta打开终端,直接在原生终端执行:pod install - 第四步:调整主项目构建设置
打开项目的.xcworkspace文件,选中主项目target,在构建设置中修改以下参数:- 找到
Excluded Architectures选项,在Any iOS Simulator SDK下添加值arm64,确保Debug、Release配置都应用该设置 - 找到
Build Active Architecture Only选项,Debug配置设为YES,Release配置设为NO - 确认QA Scheme的构建配置确实关联为Debug,无自定义配置错误
- 找到
- 第五步:重启Xcode后选择QA Scheme重新构建即可
内容的提问来源于stack exchange,提问作者Tyler DiBartolo
相关产品推荐
相关产品推荐

