React Native 0.69.9升级至0.72.5+求助:Expo依赖及iOS SDK合规问题
解决从Expo Eject的React Native 0.69.9升级至0.72.5+并适配iOS17 SDK的问题
一、先替换Expo依赖为原生等价库(核心前提)
你当前项目依赖不少Expo库,eject后继续用这些库会和RN升级冲突,必须逐个替换为原生社区库:
expo-auth-session→ 换用react-native-app-auth,或者手动实现OAuth2流程expo-constants→ 用react-native-config(管理环境变量)+ 原生端直接读取配置(iOS读Info.plist,安卓读AndroidManifest.xml)expo-file-system→ 换用react-native-fsexpo-image-picker→ 你已经装了react-native-image-picker,直接移除Expo版本即可,调整代码调用逻辑匹配原生库APIexpo-media-library→ 换用react-native-media-libraryexpo-random→ 换用react-native-get-random-valuesexpo-sharing→ 换用react-native-shareexpo-web-browser→ 你已经用了react-native-webview,可以直接替换,或者用react-native-inappbrowser-reborn@expo/vector-icons→ 和你现有的react-native-vector-icons二选一即可,保留一个兼容RN版本的就行- 直接移除
expo、expo-cli核心包,eject后不需要它们
操作命令:
# 卸载Expo相关依赖 npm uninstall expo expo-cli expo-auth-session expo-constants expo-file-system expo-image-picker expo-media-library expo-random expo-sharing expo-web-browser # 安装替代的原生库 npm install react-native-app-auth react-native-config react-native-fs react-native-media-library react-native-get-random-values react-native-share react-native-inappbrowser-reborn
替换代码里的Expo API调用,比如把Constants.manifest换成react-native-config的环境变量读取,把expo-image-picker的调用改成react-native-image-picker的写法。
二、分阶段升级RN版本,避免跨版本爆炸
别直接从0.69.9跳0.72.5,分两步走更稳:
- 先升0.70.x(Expo 47对应RN 0.70.5,和你eject项目兼容度高)
- 用RN Upgrade Helper对比0.69.9到0.70.5的差异,更新
package.json里的RN核心依赖(react、react-native、react-dom、babel、metro等) - 执行
npm install,iOS端跑npx pod-install - 逐个修复编译错误,比如依赖版本不兼容、API变更(RN 0.70开始部分原生API有调整)
- 用RN Upgrade Helper对比0.69.9到0.70.5的差异,更新
- 再从0.70.x升0.72.5
- 同样用Upgrade Helper对比差异,更新依赖
- 注意RN 0.72要求React 18.2.0,把
react和react-dom升级到18.2.0 - 同步升级依赖库版本:比如
react-native-reanimated升到3.x,react-native-gesture-handler升到2.12.x左右,确保和RN 0.72兼容
三、处理安卓自定义修改的坑
既然记不清安卓文件夹的自定义细节,按这个流程来:
- 先备份当前的
android文件夹 - 生成一个全新的RN 0.72.5项目,拿它的
android文件夹当参考:
npx react-native init TempProject --version 0.72.5
- 用文件对比工具(比如Beyond Compare)对比备份的旧
android文件夹和新项目的android文件夹,找出自定义的部分(比如修改过的build.gradle、AndroidManifest.xml、自定义原生模块等) - 把这些自定义内容逐步迁移到新的
android文件夹里,不要直接覆盖,不然会丢失RN升级带来的配置更新 - 迁移后跑
./gradlew clean清理缓存,再编译测试,修复依赖冲突或配置错误
四、适配iOS 17 SDK(Xcode 15)
RN 0.72.5本身支持Xcode 15和iOS 17 SDK,只需做这些检查:
- 把Xcode升级到15.x版本
- 打开iOS项目的
Podfile,确认platform :ios, '13.0'(RN 0.72最低支持iOS13,也可以改成14.0+) - 跑
npx pod-install更新iOS依赖 - 检查Info.plist里的权限配置(相机、相册等),确保符合iOS17的要求
- 编译测试,遇到第三方库不兼容Xcode15的情况,直接升级对应库版本(比如
react-native-webview要升到13.x+)
五、验证升级效果
- 分别运行iOS和安卓项目,测试所有核心功能(登录、文件选择、分享、PDF阅读等)
- 用Xcode15打包,上传到App Store Connect,确认不再出现ITMS-90725警告
- 跑
npm audit检查依赖安全漏洞,修复高危问题
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

