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

React Native升级后Xcode编译报错:Cannot find type 'Module' in scope

解决React Native升级后Xcode编译错误及AppDelegate适配方案

一、修复KeepAwakeModule「Cannot find type 'Module' in scope」错误

React Native升级后,原生模块的协议定义已变更,旧版Module类型已被移除,按以下步骤修改即可解决:

  • 更新模块继承与协议:打开KeepAwakeModule文件(.m或.mm),将类声明从
    class KeepAwakeModule: Module
    
    修改为兼容新版RN的标准写法:
    @interface KeepAwakeModule : NSObject <RCTBridgeModule>
    @end
    
  • 补全必要头文件与宏:确保文件顶部导入RN桥接模块头文件,并添加模块导出宏:
    #import <React/RCTBridgeModule.h>
    
    @implementation KeepAwakeModule
    RCT_EXPORT_MODULE() // 必须添加此宏标记为RN原生模块
    
    // 保留原有的KeepAwake业务方法,示例:
    RCT_EXPORT_METHOD(activate) {
        // 你的唤醒逻辑
    }
    
    RCT_EXPORT_METHOD(deactivate) {
        // 你的休眠逻辑
    }
    @end
    
  • 排查依赖来源:如果KeepAwake是第三方依赖,直接升级该库到兼容当前RN版本的最新版;若为自定义模块,按上述修改后重新编译。

二、适配AppDelegate从.m到.mm的变更

新版RN默认使用.mm扩展名(Objective-C++)以支持Fabric架构等C++依赖,适配步骤如下:

  1. 修改文件扩展名:将原AppDelegate.m重命名为AppDelegate.mm,在Xcode项目中移除旧文件、添加新的.mm文件(避免引用失效)。
  2. 更新初始化逻辑:替换旧版RN初始化代码为新版标准流程,示例如下:
    #import "AppDelegate.h"
    #import <React/RCTAppSetupUtils.h>
    #import <React/RCTBridge.h>
    #import <React/RCTRootView.h>
    #import <UIKit/UIKit.h>
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      // 新版RN初始化前置操作
      RCTAppSetupPrepareApp(application, launchOptions);
    
      RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
      RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                       moduleName:@"YourAppName"
                                                initialProperties:nil];
    
      rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
    
      self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
      UIViewController *rootViewController = [UIViewController new];
      rootViewController.view = rootView;
      self.window.rootViewController = rootViewController;
      [self.window makeKeyAndVisible];
      return YES;
    }
    
    // 若启用Fabric架构,需添加以下方法
    - (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge {
      return RCTAppSetupDefaultExtraModules(bridge);
    }
    
    @end
    
  3. 验证项目配置:选中Xcode中的AppDelegate.mm,检查右侧「Identity and Type」里的「File Type」是否为「Objective-C++ Source」,若不是手动修改。

三、通用排查与收尾步骤

  • 清理Xcode缓存:执行Cmd+Shift+K清理构建,再执行Cmd+Option+Shift+K清理派生数据。
  • 重新安装依赖:项目根目录执行yarn install,进入ios目录执行pod install --repo-update。
  • 确认版本一致性:检查package.json的react-native版本与ios/Podfile.lock中React相关依赖版本是否完全匹配,有差异则重新执行pod install。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:30:54