【问题标题】:'React/RCTBridgeModule.h' file not found in React Native 0.61.2在 React Native 0.61.2 中找不到“React/RCTBridgeModule.h”文件
【发布时间】:2020-04-21 16:27:07
【问题描述】:

我正在尝试为 React 0.61.2 创建一个自定义本机模块。

我已经创建了 Android 版本,但是 iOS 似乎存在一些问题。

我正在尝试执行以下命令:

#import <React/RCTBridgeModule.h>

@interface PaypalSdk : NSObject <RCTBridgeModule>

@end

得到:

'React/RCTBridgeModule.h' file not found

在早期的 React Native .6 版本中,它的工作方式似乎发生了很多变化。

在另一个较早版本的 React 中,我将 React.xcodeproj 添加到我的库中并且效果很好,但是这里似乎不是一个选项,因为 React.xcodeproj 已被删除。

我正在解决这个问题,并且已经测试了所有东西,但这些东西似乎都不起作用:

https://github.com/facebook/react-native/issues/25838

我也在这里尝试了所有方法,包括从我的方案中删除 React 并重新添加它:

https://github.com/facebook/react-native/issues/24363

这可能是什么原因?

编辑:我的 PaypalSdk.m 文件的一部分:

#import "PaypalSdk.h"
#import <PayPal-iOS-SDK/PayPalMobile.h>
#import <PayPal-iOS-SDK/PayPalConfiguration.h>
#import <PayPal-iOS-SDK/PayPalOAuthScopes.h>
#import <PayPal-iOS-SDK/PayPalProfileSharingViewController.h>
#import <QuartzCore/QuartzCore.h>


@implementation PaypalSdk

... various methods and properties here

RCT_EXPORT_MODULE()

RCT_EXPORT_METHOD(generateCode:(NSString *)code callback:(RCTResponseSenderBlock)callback)
{
... more code here
    callback(@[[NSString stringWithFormat: @"code: %@", "test"]]);
}

@end

【问题讨论】:

  • 现在它显示“'RCTBridgeModule.h' 文件未找到”
  • 尝试再次从 pod 安装所有内容。
  • 在 /ios 我输入了 pod deintegrate 然后 pod install 并尝试再次构建应用程序。同样的错误

标签: objective-c xcode react-native


【解决方案1】:

代替:

#import <React/RCTBridgeModule.h>

您通常会在 0.59x 版本上解决此问题:

#if __has_include("RCTBridgeModule.h")
#import "RCTBridgeModule.h"
#else
#import <React/RCTBridgeModule.h>
#endif

但是,从 RN >= v0.60x 开始,我们需要为抱怨找不到 React/{whatever.h} 的第 3 方/自定义库添加 .podspec 到 podfile。所以请不要将 .a 文件添加到 Xcode 的 Linked Framework and Libraries

为了解决这个问题,我们可以开始做:

  1. 从其他 3rd 方库(例如,RNDeviceInfo/etc..)复制 podspec

  2. 通过替换一些项目创建自己的podspec(例如,s.names.sources.source_files

s.name   = "MyPayPalLib"
s.source = { :git => "https://github.com/my-super-repo/paypal-lib-repo.git", :tag => "v#{s.version}" }

.

按照接下来的步骤,注意您的库是托管在 npm/yarn/git(远程)上还是本地存储在项目的目录中。

.

A.如果是远程库:

  1. 添加这个来跟踪你所有的 lib 文件: s.source_files = "ios/**/*.{h,m}"

  2. 将新库添加到 Podfile: pod 'MyPayPalLib', :path =&gt; '../node_modules/MyPayPalLib'

  3. 做一个pod install

B.如果本地图书馆:

  1. 在同一自定义库路径下创建此 custom.podspec,否则您需要根据需要修改上述 s.source 路径。
s.source       = { :http => 'file:' + __dir__ + '/' }
s.source_files = "customLib/*.{h,m}"
  1. 将新库添加到 Podfile: pod 'MyPayPalLib', :path =&gt; '../localLibFolder/MyPayPalLib'

  2. 做一个pod install


解决方案:

修复错误后:'React/RCTBridgeModule.h' file not found in React Native 0.61.2NativeModules 对象为空。

所以,经过一番研究,我们得到了问题:s.source_files 属性的值错误!

始终小心使用正确的s.source_files podspec 道具。

OP 正在使用:s.source_files = "react-native-paypal-sdk/*.{h,m}"

但是,这应该是:s.source_files = "ios/**/*.{h,m}"

这是远程存储库的推荐方式。

【讨论】:

  • 我不再收到上述错误(缺少网桥文件),但完成此操作后,我的 NativeModules 仍然是空的
  • 很高兴听到您解决了这个问题!我认为这个新的需要更多细节。
  • 我包含了我的 PaypalSdk.m 文件的一些详细信息 - 我不确定您还需要什么 - 在 NativeModules 中显示应该就足够了,不是吗?
  • 从'react-native'导入{NativeModules}; var PaypalSdk = NativeModules.PaypalSdk; PaypalSdk.generateCode('the_code_here');
  • 不,这一切都在一个单独的模块中(react-native-paypal-sdk)。我让它适用于Android,但不适用于iOS。我从 react-native 导入 NativeModules,它总是返回一个空对象
猜你喜欢
  • 1970-01-01
  • 2021-04-18
  • 2019-08-10
  • 2017-05-30
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2019-05-01
相关资源
最近更新 更多