M1 Pro Mac iOS项目编译问题:如何同时适配模拟器与真机?
解决M1 Pro Mac上iOS项目同时适配模拟器与真机的架构冲突问题
问题根源
M1系列Mac采用arm64架构,Xcode默认会为模拟器编译arm64版本,但部分第三方库(如Moya)仅提供x86_64的模拟器架构,导致编译时出现模块不匹配错误;而真机必须编译arm64架构,全局排除arm64会导致真机编译失败。以下是无需反复修改Excluded Architectures的解决方案:
方案一:分平台分配置设置排除架构
- 打开项目的
Build Settings,搜索Excluded Architectures - 点击选项右侧的
+,选择Add Configuration-Specific Setting,为Debug配置单独添加设置 - 点击Debug行的
+,选择Add Platform-Specific Setting,选择iOS Simulator - 在iOS Simulator对应的输入框中填入
arm64(仅排除模拟器的arm64架构,真机和Release配置不做任何排除) - 确保真机的Debug、所有Release配置的
Excluded Architectures为空
方案二:通过Podfile统一配置Pods的架构排除
如果问题主要出现在第三方Pod库,可在Podfile中添加以下脚本,自动为Pods分配置分平台设置架构:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 仅针对Debug模拟器配置排除arm64 if config.name == 'Debug' && config.build_settings['SDKROOT'] == 'iphonesimulator' config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' else # 其他配置清空排除的架构,确保真机编译正常 config.build_settings['EXCLUDED_ARCHS'] = '' end end end end
添加后执行pod install更新Pods配置。
方案三:配合Build Active Architecture Only优化编译
在Build Settings中搜索Build Active Architecture Only:
- 设置Debug模式为
YES:仅编译当前活跃设备的架构,减少编译时间并适配当前设备 - 设置Release模式为
NO:编译所有支持的架构,确保发布包兼容所有设备
验证效果
完成上述设置后,无需修改任何配置,直接切换模拟器和真机即可正常编译:
- 模拟器编译时会自动排除arm64,使用x86_64架构适配第三方库(通过Rosetta转译运行)
- 真机编译时会使用arm64架构,不会因为排除设置导致缺失架构
内容的提问来源于stack exchange,提问作者Artyom Vlasenko
相关产品推荐
相关产品推荐

