You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-fs
  • expo-image-picker → 你已经装了react-native-image-picker,直接移除Expo版本即可,调整代码调用逻辑匹配原生库API
  • expo-media-library → 换用react-native-media-library
  • expo-random → 换用react-native-get-random-values
  • expo-sharing → 换用react-native-share
  • expo-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,分两步走更稳:

  1. 先升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有调整)
  2. 再从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兼容

三、处理安卓自定义修改的坑

既然记不清安卓文件夹的自定义细节,按这个流程来:

  1. 先备份当前的android文件夹
  2. 生成一个全新的RN 0.72.5项目,拿它的android文件夹当参考:
npx react-native init TempProject --version 0.72.5
  1. 用文件对比工具(比如Beyond Compare)对比备份的旧android文件夹和新项目的android文件夹,找出自定义的部分(比如修改过的build.gradle、AndroidManifest.xml、自定义原生模块等)
  2. 把这些自定义内容逐步迁移到新的android文件夹里,不要直接覆盖,不然会丢失RN升级带来的配置更新
  3. 迁移后跑./gradlew clean清理缓存,再编译测试,修复依赖冲突或配置错误

四、适配iOS 17 SDK(Xcode 15)

RN 0.72.5本身支持Xcode 15和iOS 17 SDK,只需做这些检查:

  1. 把Xcode升级到15.x版本
  2. 打开iOS项目的Podfile,确认platform :ios, '13.0'(RN 0.72最低支持iOS13,也可以改成14.0+)
  3. 跑npx pod-install更新iOS依赖
  4. 检查Info.plist里的权限配置(相机、相册等),确保符合iOS17的要求
  5. 编译测试,遇到第三方库不兼容Xcode15的情况,直接升级对应库版本(比如react-native-webview要升到13.x+)

五、验证升级效果

  1. 分别运行iOS和安卓项目,测试所有核心功能(登录、文件选择、分享、PDF阅读等)
  2. 用Xcode15打包,上传到App Store Connect,确认不再出现ITMS-90725警告
  3. 跑npm audit检查依赖安全漏洞,修复高危问题

内容的提问来源于stack exchange,提问作者krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:02:02