RN 0.74.5升级0.76.6后iOS仍用Paper而非Fabric的调试求助
iOS端React Native新架构(Fabric)未启用的调试方案与升级经验
问题背景
将App从RN 0.74.5升级至0.76.6后,Android端新架构(Fabric)正常启用,但iOS端执行RCT_NEW_ARCH_ENABLED=1 bundle exec pod install后仍运行在Paper渲染器,大量原生模块加载失败。通过以下代码确认架构状态:
const uiManager = global?.nativeFabricUIManager ? 'Fabric' : 'Paper' console.log(`Using ${uiManager} on ${isIOS() ? 'ios' : 'android'}`)
iOS日志输出:
LOG Running "MySadApp" with {"rootTag":1,"initialProps":{}} Using Paper on ios
Android日志输出:
(NOBRIDGE) LOG Running "MySadApp" with {"rootTag":21,"initialProps":{},"fabric":true} Using Fabric on android
环境信息:
System: OS: macOS 14.3 CPU: (12) arm64 Apple M2 Pro Memory: 2.25 GB / 32.00 GB Shell: version: "5.9" path: /bin/zsh Binaries: Node: version: 18.18.0 path: ~/.asdf/installs/nodejs/18.18.0/bin/node Yarn: Not Found npm: version: 9.8.1 path: ~/.asdf/plugins/nodejs/shims/npm Watchman: version: 2024.12.02.00 path: /opt/homebrew/bin/watchman Managers: CocoaPods: version: 1.15.2 path: /Users/my_name/.asdf/shims/pod SDKs: iOS SDK: Platforms: - DriverKit 23.5 - iOS 17.5 - macOS 14.5 - tvOS 17.5 - visionOS 1.2 - watchOS 10.5 Android SDK: API Levels: - "28" - "31" - "33" - "34" - "35" Build Tools: - 30.0.3 - 31.0.0 - 33.0.0 - 33.0.1 - 33.0.2 - 34.0.0 - 34.0.0 - 34.0.0 - 34.0.0 - 35.0.0 - 35.0.0 System Images: - android-33 | Google APIs ARM 64 v8a - android-33 | Google Play ARM 64 v8a - android-34 | Google APIs ARM 64 v8a Android NDK: Not Found IDEs: Android Studio: 2024.2 AI-242.23726.103.2422.12816248 Xcode: version: 15.4/15F31d path: /usr/bin/xcodebuild Languages: Java: version: 17.0.13 path: /opt/homebrew/opt/openjdk@17/bin/javac Ruby: version: 2.7.6 path: /Users/my_name/.asdf/shims/ruby npmPackages: "@react-native-community/cli": installed: 15.1.3 wanted: ^15.0.0 react: installed: 18.3.1 wanted: 18.3.1 react-native: installed: 0.76.6 wanted: ^0.76.0 react-native-macos: Not Found npmGlobalPackages: "*react-native*": Not Found Android: hermesEnabled: true newArchEnabled: true iOS: hermesEnabled: true newArchEnabled: true
调试步骤(iOS端)
1. 彻底清理缓存并重新构建
- 删除iOS目录下的
Pods文件夹、Podfile.lock文件 - 执行
rm -rf ~/Library/Caches/CocoaPods清理CocoaPods全局缓存 - 执行
xcodebuild clean -workspace MySadApp.xcworkspace -scheme MySadApp清理Xcode项目缓存 - 切换到iOS目录,重新执行
RCT_NEW_ARCH_ENABLED=1 bundle exec pod install - 打开Xcode,执行
Product -> Clean Build Folder,再重新编译运行
2. 验证Xcode项目配置
- 打开Xcode项目,进入
Build Settings,搜索ENABLE_FABRIC和ENABLE_NEW_ARCHITECTURE,确认两者值均为YES - 检查
Other C Flags和Other C++ Flags,确认包含-DFABRIC_ENABLED=1、-DENABLE_NEW_ARCHITECTURE=1编译宏 - 查看
Info.plist,确保没有添加禁用Fabric的配置项
3. 检查Podfile与依赖兼容性
- 检查Podfile,确认没有手动设置
$RCT_NEW_ARCH_ENABLED = false的代码 - 逐一排查第三方模块:
- 公开模块查看README或仓库,确认是否支持新架构
- 私有模块检查是否实现了TurboModule和Fabric Component的适配代码
- 暂时移除不兼容模块,验证新架构是否能正常启用
4. 分析Xcode编译日志
- 编译时打开Xcode的
Report Navigator,搜索Fabric、TurboModule关键词,定位编译错误或警告 - 检查是否有模块未生成对应的
xxxSpec桥接文件(新架构依赖自动生成的Spec文件)
5. 验证JS端配置
- 检查
metro.config.js,确认没有禁用新架构的配置 - 执行
npx react-native config,查看输出中iOS的newArchEnabled字段是否为true
新架构升级经验
- 分步验证:先完成RN版本升级,确保Paper架构下iOS/Android都正常运行后,再开启新架构
- 依赖前置排查:升级前整理所有第三方模块,优先替换或移除不兼容新架构的模块
- 缓存清理要彻底:新架构切换时,缓存残留是高频问题,必须清理CocoaPods、Xcode、Metro的所有缓存
- 日志重点关注:Android的
NOBRIDGE标记和fabric:true是新架构启用的明确信号;iOS端无类似标记时,优先排查原生侧编译配置 - 私有模块适配要点:公司私有模块需实现TurboModule的替代导出接口,以及Fabric组件的
ComponentDescriptor注册逻辑
内容的提问来源于stack exchange,提问作者Ricsasa
相关产品推荐
相关产品推荐

