Expo eject后iOS编译报错:RCTAsyncLocalStorage无initWithStorageDirectory:方法
解决Expo Eject后Xcode中
RCTAsyncLocalStorage的initWithStorageDirectory:错误 我之前也碰到过这个问题,这个错误的核心原因是Expo eject之后,项目里的AsyncStorage实现和你当前使用的React Native 0.50.3版本不兼容,或者是Expo的配置残留导致调用了一个不存在的初始化方法。下面是几个经过验证的解决方案,你可以按顺序尝试:
方案一:确保使用React Native内置的AsyncStorage
React Native 0.50.x版本已经内置了AsyncStorage,不需要依赖第三方或者Expo的旧实现。检查你项目中所有使用AsyncStorage的代码,确保导入语句是:
import AsyncStorage from 'react-native';
如果之前是从expo或者其他库导入的,替换成上面的写法。
方案二:清理依赖和Xcode缓存
有时候缓存或者依赖损坏会导致这类奇怪的错误,按以下步骤操作:
- 删除项目根目录的
node_modules文件夹:rm -rf node_modules - 清除npm缓存(用yarn的话换成
yarn cache clean):npm cache clean --force - 重新安装依赖:
npm install - 清理Xcode的Derived Data:
打开Xcode → 点击顶部菜单栏的Xcode→Preferences→ 切换到Locations标签 → 点击Derived Data旁边的箭头,找到你当前项目的文件夹并删除它。 - 重启Xcode,然后重新build项目。
方案三:更新CocoaPods依赖(如果使用了Pods)
如果你的iOS项目用了CocoaPods管理依赖,可能是Pods版本不匹配导致的:
- 打开项目的
Podfile,确保React相关的依赖版本和你的react-native版本(0.50.3)一致。 - 执行以下命令重新安装Pods:
pod deintegrate pod install
方案四:手动修改初始化代码(仅前面方案无效时尝试)
如果上面的方法都没解决,你可以找到调用initWithStorageDirectory:的代码位置(通常在AppDelegate.m或者相关初始化文件中),把它替换成React Native 0.50.x支持的初始化方式:
// 替换之前的 initWithStorageDirectory: 调用 RCTAsyncLocalStorage *asyncStorage = [[RCTAsyncLocalStorage alloc] init];
你的依赖中expo@23.0.6和react-native@0.50.3是匹配的,所以按上面的步骤操作应该能解决问题。
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

