React Native升级0.66后Swift原生类桥接失效无法调用问题求助
问题排查及修复方案
- 首先是RN侧模块名、方法名与原生侧不匹配
- 原生暴露的模块名为
CalendarManager,但你在RN代码中错误解构了CalendarModule,导致你拿到的模块本身就是undefined,类型断言as CalendarManager屏蔽了TS层面的报错,运行时调用静默失败,自然也不会触发原生类的初始化逻辑,断点无法命中。 - 原生暴露的方法名为
addEvent,你在RN中调用的是createCalendarEvent,同时原生方法要求3个参数,你只传了2个,完全匹配不到对应的原生方法。
修复后的CalendardModule.ts代码:
调用代码也要对应修改:const { CalendarManager } = NativeModules; // 模块名和原生保持一致 type CalendarManager = { addEvent(name: string, location: string, date: number): void; // 方法名、参数和原生对齐 }; export default CalendarManager as CalendarManager;// 点击回调函数 const onClickListenerHandler = () => { console.log("Test"); // 方法名、参数数量和原生一致,date参数传对应时间戳即可 CalendarManager.addEvent("Test", "Test", Date.now()); }; - 原生暴露的模块名为
- 其次是OC桥接文件配置缺失
React Native 0.64+版本对Swift原生模块的桥接要求更严格,你需要在CalendarManager.m文件头部导入RN桥接头文件:
0.66版本新架构尚未稳定,确认你的#import <React/RCTBridgeModule.h> @interface RCT_EXTERN_MODULE(CalendarManager, NSObject) RCT_EXTERN_METHOD(addEvent:(NSString *)name location:(NSString *)location date:(nonnull NSNumber *)date) @endpodfile中没有强制开启新架构相关配置,避免兼容性问题。 - 最后是编译缓存问题
跨版本升级后很容易残留旧编译缓存,按下列步骤清理后重新运行即可:- 关闭Xcode,删除ios/build文件夹
- 进入ios目录执行
pod deintegrate && pod install - 重新打开Xcode,执行Product -> Clean Build Folder后再运行项目
内容的提问来源于stack exchange,提问作者user17051485
相关产品推荐
相关产品推荐

