iOS端React Native Reanimated报错及AppDelegate配置问题求助
iOS环境下React Native集成react-native-reanimated的系列错误解决
项目版本信息
react-native 0.70.1react 18.1.0react-native-reanimated 2.9.1
遇到的问题及尝试操作
- 初始错误:使用react-native-reanimated时触发
TypeError: undefined is not an object 'installCoreFunctions' - 尝试自定义RCTBridge初始化代码:
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"MyApp" initialProperties:nil];
触发新错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AppDelegate sourceURLForBridge:]: unrecognized selector sent to instance 0x283b010e0'
- 尝试修改
initialProperties:nil为initialProperties:${},触发错误:Use of undeclared identifier '$'
- 同时出现内存错误:
com.facebook.react.JavaScript (9): EXC_BAD_ACCESS (code=1, address=0xffffa0000c250698)
解决方案
1. 修复sourceURLForBridge:未实现错误
在AppDelegate.m中补充实现该方法,适配RN 0.70+的Hermes引擎:
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif }
2. 修正react-native-reanimated初始化问题
react-native-reanimated 2.x需要配置Babel插件:
在babel.config.js中添加插件配置:
module.exports = { presets: ['module:metro-react-native-babel-preset'], plugins: ['react-native-reanimated/plugin'], };
然后执行以下操作:
- 进入iOS目录执行
pod install - 清除Metro缓存:
npx react-native start --reset-cache - 清理Xcode缓存(Cmd+Shift+K)后重新构建项目
3. 修正initialProperties的错误
${}是JavaScript语法,不能直接用于Objective-C代码,保持initialProperties:nil即可,无需修改。
4. 解决EXC_BAD_ACCESS内存错误
该错误多与缓存或引擎冲突有关,执行以下步骤:
- 删除项目根目录
node_modules,重新执行yarn install或npm install - 删除iOS目录下的
build文件夹 - 重启Xcode和Metro服务
验证步骤
- 进入iOS目录执行
pod install - 启动Metro:
npx react-native start --reset-cache - 重新构建iOS项目:
npx react-native run-ios
内容的提问来源于stack exchange,提问作者red-devil
相关产品推荐
相关产品推荐

