React Native 0.65.1 iOS模拟器编译报x86_64架构9个重复符号错误
问题产生原因
- 版本兼容性冲突:React Native 0.65.1 与 CocoaPods 1.11.2 存在原生适配缺陷,CocoaPods 1.11.x 调整了构建脚本的执行逻辑,会导致 FBReactNativeSpec 等 RN 核心原生模块重复生成代码符号,最终触发x86_64架构下的符号重复报错
- 编译缓存残留:Xcode DerivedData 目录下存在陈旧的构建产物,和新编译生成的符号定义重复
- 依赖重复引入:项目存在同一依赖被多次引入的情况,比如同时在 Podfile 中手动声明了某 RN 原生依赖,而该依赖已经通过
pod install自动从 node_modules 中同步引入 - 架构配置异常:项目模拟器架构配置冲突,同时开启了多架构编译但部分依赖未做兼容处理
解决方法
步骤1:全量清理本地缓存
执行以下命令清理所有编译缓存和依赖产物:
# 清理Xcode DerivedData缓存 rm -rf ~/Library/Developer/Xcode/DerivedData/* # 清理ios目录下的构建产物 cd ios && rm -rf build Pods Podfile.lock # 清理node_modules并重新安装 cd .. && rm -rf node_modules yarn.lock package-lock.json # 重新安装依赖 npm install # 或者yarn install # 重新安装Pod cd ios && pod install
清理完成后重新打开Xcode运行项目,排查是否修复。
步骤2:修复RN与CocoaPods版本兼容问题
如果清理缓存后问题依旧,是0.65.1和CocoaPods1.11.2的兼容问题,按以下方式处理:
- 方案1:降级CocoaPods到1.10.2版本,该版本和RN0.65.x适配性更好
执行命令:sudo gem install cocoapods -v 1.10.2,之后重新执行pod install - 方案2:如果不想降级CocoaPods,在Podfile中添加以下配置屏蔽重复符号生成:
找到post_install块,添加以下代码:
修改完成后重新执行post_install do |installer| installer.pods_project.targets.each do |target| if target.name == "FBReactNativeSpec" target.remove_from_project end if target.name == "react-native-config" target.build_configurations.each do |config| config.build_settings['APPLY_RULES_IN_COPY_FILES'] = 'NO' end end end endpod install即可。
步骤3:排查重复依赖
检查package.json和Podfile,确认没有同一依赖被多次引入的情况,比如某第三方RN库既在package.json中安装,又手动在Podfile中添加了pod声明,删除重复的声明后重新安装依赖即可。
步骤4:调整模拟器架构配置
如果使用的是M系列芯片的Mac,在Xcode中打开项目,找到Build Settings -> Excluded Architectures,在Debug模式的模拟器配置中添加arm64,强制模拟器编译为x86_64架构,避免多架构编译导致的符号冲突。
内容的提问来源于stack exchange,提问作者flyingBird
相关产品推荐
相关产品推荐

