iOS React Native应用启动报错:EXC_BAD_ACCESS问题求助
iOS React Native启动时EXC_BAD_ACCESS错误排查方案
iOS平台React Native应用启动时触发错误,错误信息:
com.facebook.react.JavaScript (10): EXC_BAD_ACCESS (code=1, address=0x1685)
项目依赖列表:
{ "@hookstate/core": "^4.0.1", "@notifee/react-native": "^7.8.0", "@ptomasroos/react-native-multi-slider": "^2.2.2", "@react-native-async-storage/async-storage": "^1.17.11", "@react-native-community/checkbox": "^0.5.14", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/geolocation": "^3.0.6", "@react-native-community/netinfo": "^9.4.1", "@react-native-community/slider": "^4.4.2", "@react-native-firebase/analytics": "17.4.1", "@react-native-firebase/app": "^17.4.1", "@react-native-firebase/messaging": "^17.4.1", "@react-native-firebase/auth": "17.4.1", "@react-native-firebase/crashlytics": "17.4.1", "@react-native-firebase/dynamic-links": "17.4.1", "@react-native-masked-view/masked-view": "^0.2.8", "@react-native/normalize-color": "^2.1.0", "@react-navigation/bottom-tabs": "^6.4.0", "@react-navigation/drawer": "^6.5.0", "@react-navigation/material-top-tabs": "^6.6.3", "@react-navigation/native": "^6.0.13", "@react-navigation/native-stack": "^6.9.1", "@react-navigation/stack": "^6.3.11", "@reduxjs/toolkit": "^1.9.3", "@twotalltotems/react-native-otp-input": "^1.3.11", "axios": "^1.3.4", "date-fns": "^2.30.0", "i18next": "^22.4.15", "moment": "^2.29.4", "moment-timezone": "^0.5.41", "react": "17.0.2", "react-i18next": "^12.2.0", "react-native": "0.68.2", "react-native-blob-util": "^0.18.2", "react-native-calendars": "^1.1295.0", "react-native-config": "^1.5.1", "react-native-country-codes-picker": "^2.2.2", "react-native-create-thumbnail": "^1.6.4", "react-native-dashed-line": "^1.1.0", "react-native-device-country": "^1.0.3", "react-native-device-info": "^10.8.0", "react-native-document-picker": "^8.2.0", "react-native-element-dropdown": "^2.9.0", "react-native-elements": "^3.4.3", "react-native-fast-image": "^8.6.3", "react-native-flash-message": "0.4.1", "react-native-gesture-handler": "^2.9.0", "react-native-gifted-chat": "2.4.0", "react-native-htmlview": "^0.16.0", "react-native-image-crop-picker": "^0.40.0", "react-native-image-slider-box": "^1.1.8", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-linear-gradient": "^2.6.2", "react-native-media-controls": "^2.3.0", "react-native-meet-hour-sdk": "^3.0.22", "react-native-orientation-locker": "^1.5.0", "react-native-pager-view": "^6.2.0", "react-native-paper": "^5.2.0", "react-native-pdf": "^6.6.2", "react-native-permissions": "^3.8.0", "react-native-pie": "^1.1.2", "react-native-progress": "^5.0.0", "react-native-razorpay": "^2.3.0", "react-native-reanimated": "2.14.4", "react-native-responsive-screen": "^1.4.2", "react-native-safe-area-context": "4.3.1", "react-native-screens": "~3.10.2", "react-native-share": "^8.2.2", "react-native-shimmer-placeholder": "^2.0.9", "react-native-simple-gradient-progressbar-view": "^0.2.0", "react-native-snap-carousel": "^3.9.1", "react-native-svg": "12.1.0", "react-native-swipeable": "^0.6.0", "react-native-tab-view": "^3.5.2", "react-native-thumbnail-video": "^0.1.2", "react-native-timezone": "^2.2.0", "react-native-vector-icons": "^9.2.0", "react-native-video": "^5.2.1", "react-native-video-controls": "^2.8.1", "react-native-video-player": "^0.14.0", "react-native-webview": "^11.26.1", "react-redux": "^8.0.5", "redux": "^4.2.0", "redux-devtools-extension": "^2.13.9", "redux-persist": "^6.0.0", "redux-saga": "^1.1.3", "socket.io-client": "^4.7.1", "sp-react-native-in-app-updates": "^1.3.1" }
已尝试Firebase依赖升降级、React Native版本升级,问题未解决。
排查步骤
1. 定位Native层内存访问问题
- 开启XCode Zombie Objects检测:打开XCode → 顶部
Product→Scheme→Edit Scheme→Diagnostics标签页,勾选Zombie Objects,重新运行APP。崩溃时会显示具体被野指针访问的对象,直接定位问题模块。 - 逐个移除Native依赖:先移除
react-native-meet-hour-sdk、react-native-image-crop-picker、react-native-razorpay这类涉及复杂Native逻辑的库,重新打包测试,确认是否是某一模块导致的冲突。
2. 检查JavaScript启动逻辑
- 注释非核心初始化代码:暂时注释
redux-persist持久化恢复、i18next初始化、Firebase启动逻辑等启动时执行的同步代码,逐步恢复排查,看是否是JS侧的内存引用错误。 - 启用Hermes引擎:在
ios/Podfile中修改配置:
执行use_react_native!( :path => config[:reactNativePath], :hermes_enabled => true )cd ios && pod install,重新打包。Hermes的内存管理机制能有效减少JS侧内存访问错误。
3. 清理构建缓存
- 清理iOS构建残留:
rm -rf ios/build rm -rf ~/Library/Developer/Xcode/DerivedData cd ios && pod deintegrate && pod install - 重置Metro缓存:
npx react-native start --reset-cache
4. 修复依赖版本不兼容
- 统一Firebase模块版本:确保所有
@react-native-firebase/*子模块版本完全一致(当前app是^17.4.1,其他是17.4.1,锁定为相同版本)。 - 调整Reanimated版本:RN 0.68.2推荐搭配
react-native-reanimated@2.9.0,与react-native-gesture-handler@2.9.0版本匹配,尝试降级并重新链接。
5. 系统与架构适配
- 测试多版本iOS设备:在iOS 15、16、17真机/模拟器上分别测试,确认是否是特定系统版本的兼容性问题。
- 调整XCode架构配置:打开XCode项目 →
Build Settings→Architectures,设置为arm64,排除i386、x86_64,避免架构冲突导致的内存错误。
内容的提问来源于stack exchange,提问作者Maulik Patel
相关产品推荐
相关产品推荐

