Xcode添加armv7至排除架构后无法运行arm64 iOS模拟器如何解决
问题根因
该冲突由三方面共同导致:
- Xcode 12及以上版本开启了自动架构适配逻辑,当在Project层级为真机SDK添加armv7排除规则时,会默认给模拟器SDK追加arm64排除规则,避免架构不匹配
- CocoaPods不会自动同步主工程修改的架构配置到Pods工程,默认编译出的
Pods_Runner.framework不会自带模拟器arm64架构切片,此时删除自动生成的arm64排除规则就会触发架构缺失报错 - google_ml_kit系列原生依赖从2022年起就完全停止了对armv7、i386老旧架构的支持,手动在Xcode UI层面修改架构规则很容易触发配置不同步问题
解决步骤
- 清空所有手动添加的架构排除规则:打开Xcode,分别找到Project -> Build Settings -> Excluded Architectures、Target -> Build Settings -> Excluded Architectures,选中所有自定义添加的规则按delete键恢复系统默认值,不要手动添加任何armv7、arm64相关排除项。
- 统一通过Podfile配置架构规则:打开项目iOS目录下的
Podfile文件,在文件末尾替换/添加如下post_install脚本,所有架构配置统一在这里管理,不要在Xcode UI中修改:
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| # 真机环境自动排除已废弃的armv7架构 config.build_settings['EXCLUDED_ARCHS[sdk=iphoneos*]'] = 'armv7' # 模拟器环境不排除arm64,强制编译对应架构切片 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' # 关闭仅编译当前架构,确保所有依赖编译全量需要的架构切片 config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' end end end
- 清理旧缓存重新安装依赖:关闭Xcode,在项目根目录依次执行如下命令:
flutter clean cd ios rm -rf Pods Podfile.lock build ~/Library/Developer/Xcode/DerivedData/Runner-* pod install --repo-update
- 重新打开
ios/Runner.xcworkspace,选择arm64架构的iOS模拟器直接编译即可,不会再出现架构缺失报错,也不会出现模拟器无法启动的问题。
避坑说明
- 后续不要在Xcode的Build Settings UI中手动修改任何Excluded Architectures配置,所有架构规则统一在Podfile的post_install脚本中维护,避免CocoaPods同步配置时覆盖自定义规则,或触发Xcode的自动错误适配。
- 若执行完上述步骤仍报错,先确认使用的
google_ml_kit_object_detection版本不低于0.7.0,低于该版本的官方依赖本身未提供模拟器arm64编译切片,升级到最新稳定版即可。
内容的提问来源于stack exchange,提问作者Flutter Dev
相关产品推荐
相关产品推荐

