React Native iOS:requireNativeComponent未在UIManager中找到
解决“requireNativeComponent was not found in the UIManager”问题
1. 确保npm包的iOS原生文件被正确引入
本地开发时原生文件直接在工程里,但npm发布后,主应用的Xcode不会自动导入包内的原生代码,需要通过podspec配置让CocoaPods自动处理:
- 在npm包根目录创建
[你的包名].podspec文件,示例内容:
require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) Pod::Spec.new do |s| s.name = package["name"] s.version = package["version"] s.summary = package["description"] s.homepage = package["homepage"] s.license = package["license"] s.authors = package["author"] s.platforms = { :ios => "11.0" } s.source = { :git => package["repository"]["url"], :tag => "#{s.version}" } # 匹配包内所有iOS原生文件路径 s.source_files = "ios/**/*.{h,m,swift}" s.dependency "React-Core" end
- 在包的
package.json中添加配置,让RN自动链接识别podspec:
"react-native": { "podspecPath": "./[你的包名].podspec" }
2. 验证模块注册名称一致性
你的JS端调用CounterView是正确的(RN会自动去掉原生模块名末尾的Manager),但需要确认:
- 原生端
CounterViewManager.m中的RCT_EXTERN_MODULE(CounterViewManager, RCTViewManager)没有拼写错误 - 主应用中没有其他模块注册了同名的
CounterViewManager
3. 重新安装依赖并清理缓存
- 进入主应用的ios目录,执行
pod install --repo-update,确保拉取并安装包的原生依赖 - 清理RN缓存:
npx react-native start --reset-cache - 清理Xcode缓存:打开Xcode,选择
Product > Clean Build Folder,然后重新编译主应用
4. 手动导入原生文件(自动链接失效时)
如果以上步骤无效,手动将包内的iOS文件加入主应用工程:
- 打开主应用Xcode工程,右键点击项目目录,选择
Add Files to "[你的应用名]" - 选中npm包ios目录下的所有
.swift和.m文件,勾选Copy items if needed和对应的编译target
内容的提问来源于stack exchange,提问作者lol69
相关产品推荐
相关产品推荐

