M1芯片Mac Xcode构建React Native iPad模拟器项目报错问询
排查解决步骤
1. 修复Swift编译参数冲突
从你贴出的编译日志可以看到,ExpoModulesCore(属于Pods依赖)的swiftc编译参数同时携带了-incremental和-whole-module-optimization两个互斥参数,这是编译失败的直接原因。手动修改主项目的编译配置不会影响Pods生成的配置,需要通过Podfile钩子统一修正:
- 打开iOS目录下的
Podfile,在文件末尾添加以下post_install逻辑:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 关闭全模块优化,消除和增量编译的冲突 config.build_settings['SWIFT_WHOLE_MODULE_OPTIMIZATION'] = 'NO' config.build_settings['SWIFT_OPTIMIZATION_LEVEL'] = '-Onone' # 清空模拟器架构排除项,避免arm64架构编译异常 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' end end end
- 进入iOS目录执行命令重新生成Pods配置:
pod deintegrate && pod install
- 打开Xcode,按
Command+Shift+K清理构建缓存,再删除~/Library/Developer/Xcode/DerivedData目录下对应项目的缓存文件夹,重新执行构建。
2. 解决react-native-webrtc文件找不到报错
M1芯片设备上这类包含原生二进制的依赖报文件不存在,基本是架构适配或pod安装环节的问题,按以下顺序排查:
- 确认打开Xcode项目时选择的是
.xcworkspace后缀的文件,而非.xcodeproj文件 - 执行以下命令安装Rosetta转译依赖,再重新安装pod:
sudo arch -x86_64 gem install ffi cd ios arch -x86_64 pod install
- 如果仍报错,在Xcode中选中Pods项目,找到
react-native-webrtctarget,在Build Settings中搜索Header Search Paths,添加路径$(SRCROOT)/../node_modules/react-native-webrtc/ios,并设置为recursive模式。
3. 环境一致性校验
- 执行以下命令重装前端依赖,排除依赖损坏问题:
yarn cache clean rm -rf node_modules yarn install
- 执行
pod repo update更新本地CocoaPods仓库,避免本地仓库版本和同事不一致导致的依赖差异 - 以上操作都无效时,右键Xcode图标选择「显示简介」,勾选「使用Rosetta打开」,重启Xcode后再尝试构建。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

