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

自定义React Native插件iOS端返回null,安卓运行正常该如何解决

仅编写@interface RCT_EXTERN_MODULE(MyPlugin, NSObject)不足以让模块正常暴露,你需要补充以下配置:

排查与修复步骤

  • 补充Swift类协议声明与必要导出配置
    你的Swift类没有遵循RCTBridgeModule协议,也没有声明模块名,修改myPlugin.swift代码:
import Foundation
import React // 补充导入React库

@objc(MyPlugin)
// 增加RCTBridgeModule协议声明
class MyPlugin: NSObject, RCTBridgeModule {

  // 必须实现:指定导出到JS端的模块名,要和RCT_EXTERN_MODULE里的名称一致
  @objc static func moduleName() -> String! {
    return "MyPlugin"
  }

  // 可选但建议添加:指定模块是否需要在主线程初始化
  @objc static func requiresMainQueueSetup() -> Bool {
    return false
  }

  @objc(multiply:withB:withResolver:withRejecter:)
  func multiply(a: Float, b: Float, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
    resolve(a*b)
  }
}
  • 确认桥接头文件配置正确
  1. 桥接头文件myPlugin-bridging-header.h建议补充通用导入,内容调整为:
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
  1. 打开Xcode,进入项目主target的 Build Settings 页,搜索Objective-C Bridging Header,确认配置项的值是你桥接头文件的正确相对路径,比如路径为[你的项目名]/myPlugin-bridging-header.h,路径错误会导致Swift和OC无法互通,模块无法导出。
  • 确认文件已加入编译源
    进入Xcode项目的 Build Phases -> Compile Sources 列表,确认myPlugin.m和myPlugin.swift都在列表内,不存在的话手动拖拽添加,未加入编译的文件不会被打包到APP中,自然无法被NativeModules读取。
  • 独立插件额外配置(如果你是开发第三方插件而非在主项目内写原生代码)
    检查你的插件podspec文件,确认source_files配置包含了所有原生文件,示例配置:
s.source_files = "ios/**/*.{h,m,mm,swift}"

生效方式

修改完成后按以下步骤清理缓存重新编译即可:

  1. 关闭当前运行的Metro服务
  2. 删除ios目录下的build文件夹
  3. 进入ios目录执行pod install --repo-update
  4. 重新执行npx react-native run-ios启动项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:04