M1芯片款Mac mini上Xcode12.4开发iOS应用遇arm64架构报错求助
M1芯片Mac环境下Xcode12.4集成特定支付、地图框架的构建报错修复指南
适用场景
- 设备:M1架构新款Mac mini
- 工具版本:Xcode12.4
- 触发场景:通过CocoaPods集成Razorpay支付组件、GooglePlaces地图组件后,iOS模拟器构建抛出以下两类报错:
- Razorpay模块目标不兼容报错:
Module 'Razorpay' was created for incompatible target arm64-apple-ios10.0 - GooglePlaces架构链接报错:
building for iOS Simulator, but linking in object file built for iOS, file '/Pods/GooglePlaces/Frameworks/GooglePlaces' for architecture arm64
- Razorpay模块目标不兼容报错:
- 已知前提:相同项目配置在Intel芯片Mac上可正常构建运行,参考网络上流传的通用Xcode12架构适配方案操作后仍无法解决;这类通用方案失效的核心原因是仅修改了主项目的架构配置,没有同步覆盖CocoaPods生成的子目标配置,也没有对齐Razorpay框架的部署目标版本,导致pod工程的配置仍然和M1模拟器架构规则冲突。
分步修复操作
1. 清理旧缓存,从根源避免旧配置干扰
- 依次删除项目目录下的
Pods文件夹、Podfile.lock文件 - 打开终端重装适配当前Xcode12.4版本的CocoaPods,避免旧版本pod的架构配置逻辑错位
2. 在Podfile中添加统一的编译配置脚本
- 打开项目根目录下的
Podfile文件,在文件末尾添加如下post_install脚本,统一为不兼容的二进制框架配置构建规则:
post_install do |installer| installer.pods_project.targets.each do |target| # 为Razorpay框架对齐部署目标,解决模块编译目标不匹配问题 if target.name == 'Razorpay' target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' # 模拟器构建环节排除不兼容的真机arm64架构 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end # 为所有Google系二进制框架同步配置架构规则 if target.name.include?('Google') target.build_configurations.each do |config| config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' end end end end
- 保存Podfile后,在终端项目路径下执行
pod install重新拉取依赖
3. 主项目配置同步校准
- 打开主项目的Target设置,进入
Build Settings面板 - 搜索
Excluded Architectures选项,针对Any iOS Simulator SDK分类,添加排除架构arm64 - 搜索
Build Active Architecture Only选项,将Debug、Release配置下的模拟器构建规则统一设置为NO
4. M1芯片专属Xcode运行配置调整
- 找到应用程序目录下的Xcode图标,右键选择「显示简介」
- 勾选「使用Rosetta打开」选项,重启Xcode
- 进入Xcode的
Product菜单,按住Option键点击Clean Build Folder,清空全部构建缓存后重新构建模拟器目标
效果验证
完成上述操作后,模拟器构建环节会自动跳过不兼容的真机arm64 slice,使用x86_64架构的框架slice参与链接,同时对齐Razorpay框架的编译目标版本,两类报错会直接消除。
内容的提问来源于stack exchange,提问作者Mitesh Dobareeya
相关产品推荐
相关产品推荐

