使用react-native-pdf打包iOS、Android时出现构建报错如何解决?
react-native-pdf 双端打包构建报错解决方案
问题根因说明
react-native-pdf@6.4.0版本将react-native-blob-util设为对等依赖,不会随主库自动安装,所以会触发模块找不到的报错- 手动安装依赖后iOS的重复符号错误,通常是Autolinking机制冲突、旧依赖残留或Pod编译配置异常导致
解决步骤
1. 清理旧依赖与缓存
执行以下命令删除所有残留的依赖文件与缓存:
rm -rf node_modules package-lock.json yarn.lock pnpm-lock.yaml rm -rf ios/Pods ios/Podfile.lock cd android && ./gradlew clean && cd ..
如果项目之前使用过rn-fetch-blob(react-native-blob-util的上游旧库),先完全卸载:
npm uninstall rn-fetch-blob # 若使用yarn则执行 yarn remove rn-fetch-blob
同时删除Android项目中MainApplication.java、AndroidManifest.xml里所有rn-fetch-blob相关的配置代码。
2. 安装匹配版本依赖
在package.json中确认以下依赖版本匹配:
{ "dependencies": { "react-native-pdf": "^6.4.0", "react-native-blob-util": "^0.13.16" } }
执行安装命令:
npm install # 若使用yarn则执行 yarn install
3. 修复iOS重复符号问题
- 首先检查ios/Podfile文件,确认没有手动引入
react-native-blob-util的代码,RN 0.60+的Autolinking会自动处理依赖引入,手动声明会导致重复加载 - 若删除手动声明后仍报错,在Podfile的
post_install代码块中添加以下配置,排除重复编译标记:
post_install do |installer| installer.pods_project.targets.each do |target| # 修复react-native-blob-util重复符号问题 if target.name == 'react-native-blob-util' target.build_configurations.each do |config| config.build_settings['OTHER_LDFLAGS'] ||= ['$(inherited)'] config.build_settings['OTHER_LDFLAGS'] -= ['-ObjC'] end end # 其余原有post_install配置保留即可 end end
修改完成后执行Pod安装命令:
cd ios && pod install --repo-update && cd ..
4. 重新构建验证
- iOS端打包前先打开Xcode,点击
Product > Clean Build Folder清理构建缓存后再执行打包 - Android端直接执行打包命令即可
内容的提问来源于stack exchange,提问作者Harish Kumar Kailas
相关产品推荐
相关产品推荐

