React Native iOS构建:react-native-share引发x86_64重复符号报错
问题根因
这是react-native-share@7.4.1版本自带的iOS配置bug:RNShare的源码被同时加入了主应用Target、RNShare Pod依赖两个编译单元的源文件列表,同一份代码被编译两次,一份输出到主工程的中间产物目录Build/Intermediates.noindex,一份被打包进Pod编译生成的静态库libRNShare.a存到Build/Products目录,链接阶段就会报重复符号错误,和网上常见的多依赖冲突、导入写法错误的场景完全不同。
修复步骤
按顺序操作即可:
- 第一步:清理所有历史编译缓存,避免旧产物干扰
执行以下命令清空缓存:
# 清空Xcode全局编译缓存 rm -rf ~/Library/Developer/Xcode/DerivedData/* # 进入iOS目录清理pod相关缓存 cd ios pod deintegrate pod cache clean react-native-share --all
- 第二步:修正Pod配置,避免RNShare源码被重复编译
如果你的Podfile里是手动写的react-native-share依赖声明,直接给它加上modular_headers => false参数即可:
pod 'react-native-share', :path => '../node_modules/react-native-share', :modular_headers => false
如果你是用RN自动链接(也就是Podfile里通过use_native_modules!自动引入依赖,没有手动写RNShare的pod声明),直接在Podfile末尾添加下面的post_install钩子,自动修正RNShare的编译配置:
post_install do |installer| installer.pods_project.targets.each do |target| next unless target.name == 'RNShare' target.build_configurations.each do |config| config.build_settings['OTHER_CFLAGS'] = ['$(inherited)', '-DREACT_NATIVE_SHARE_STATIC_LIBRARY=1'] end end end
- 第三步:重新安装依赖后构建
在ios目录下重新执行pod安装,回到项目根目录重新触发iOS构建即可:
pod install cd .. npm run ios
兜底修复方案
如果上面的操作执行完还是报相同错误,直接用Xcode打开ios/你的项目名.xcworkspace手动修正:
- 选中左侧导航栏最上方的项目文件,在Target列表选中你的主应用Target
- 切换到
Build Phases标签页,找到Compile Sources列表 - 在列表搜索框输入
RNShare,把所有搜索出来的.m文件选中,点击列表下方的减号移除
注意:这一步只是把这些文件从主应用的编译列表里移除,不要勾选删除文件的选项,这些源码后续会由RNShare的Pod Target负责编译,不会影响功能正常使用
- 重新点击Xcode的运行按钮,或者回到终端执行
npm run ios即可正常构建
内容的提问来源于stack exchange,提问作者R. Gurung
相关产品推荐
相关产品推荐

