未找到 React/RCTDefines.h' 文件 (RN0.61)

Posted

技术标签:

【中文标题】未找到 React/RCTDefines.h\' 文件 (RN0.61)【英文标题】:React/RCTDefines.h' file not found (RN0.61)未找到 React/RCTDefines.h' 文件 (RN0.61) 【发布时间】:2019-10-14 09:05:29 【问题描述】:

将 RN 从 RN0.60 升级到 RN0.61。由于以下问题,ios 构建失败:

/react-native/React/Base/RCTBridgeModule.h:10:9: 'React/RCTDefines.h' file not found

我知道breaking changes。 (React.xcodeproj 已弃用)

尝试一些事情

    npx react-native-clean-project & 重新设置项目 删除 Pods/ & pod install ...没办法了...

这是我的 podfile 的样子。

  pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
  pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
  pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
  pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"

  pod 'React', :path => '../node_modules/react-native/'
  pod 'React-Core', :path => '../node_modules/react-native/'
  pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
  pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
  pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'

  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
  pod 'ReactCommon/jscallinvoker', :path => '../node_modules/react-native/ReactCommon'
  pod 'ReactCommon/turbomodule/core', :path => '../node_modules/react-native/ReactCommon'
  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

  # Required by RNFirebase
  pod 'Firebase/Core', '~> 6.9.0'
  pod 'RNFirebase', :path => '../node_modules/react-native-firebase/ios'
  pod 'Fabric', '~> 1.10.2'
  pod 'Crashlytics', '~> 3.14.0'

  # FBSDK
  pod 'react-native-fbsdk', :path => '../node_modules/react-native-fbsdk'

  pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo'
  pod 'react-native-image-picker', :path => '../node_modules/react-native-image-picker'
  pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
  pod 'react-native-webview', :path => '../node_modules/react-native-webview'

【问题讨论】:

【参考方案1】:

这是我花了一整天时间挖掘原因后的解决方案, . . . .

TLDR;

对于抱怨找不到 React/whatever.h

的任何第 3 方/自定义库,您需要将 .podspec 添加到 podfile

第三方库

如果您使用的是第三方库(Yarn/NPM/等)

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

    通过替换一些项目(s.name、s.source)创建自己的 podspec >

s.name         = "NoSupportedLib"
s.source       =  :git => "https://github.com/react-native-community/NoSupportedLibName.git", :tag => "v#s.version" 

您可能需要注意以下事项,因为并非所有依赖项都可能存储在文件夹路径 ios/**/your.m & your.h files

s.source_files  = "ios/**/*.h,m"

    在 podfile 中添加新行 pod 'NoSupportedLib', :path => '../node_modules/NoSupportedLib'

    Pod 安装

本地依赖

如果您有本地依赖项,您也应该这样做(而不是将 .a 文件添加到 Xcode 的链接框架和库中。)

    按照上面描述的相同步骤进行操作 在声明 s.source 和 s.source_files 的步骤 2 中,您应该执行以下操作:(假设您在同一自定义库路径中创建此 custom.podspec,否则您需要修改s.source 路径根据您的需要)
s.source            =  :http => 'file:' + __dir__ + '/' 
s.source_files  = "customLib/*.h,m"
    在 podfile 中添加新行
pod 'customLib', :path => '../localDependency/customLib'

子点

我尝试在我的方案下添加 React 作为构建目标,显然它没有帮助。我认为对于 >=RN0.60 的项目,我们应该使用 ReactNative 提供的autolinking?因此,要保持 Xcode 的链接框架和库干净。

【讨论】:

以上都不适用于 react-native-local-auth。我按照您的建议在 ../node_modules/reat-native-local-auth/RNLocalAuth.podspec 中创建了 .podspec,但出现错误 ---> No podspec found for RNLocalAuth in ../node_modules/react-native-local-auth/RNLocalAuth.podspec @Krishna 再次检查您的 podspec 名称和位置,您可能指向错误。只是我的猜测,你可能想在你的 podfile pod 'RNLocalAuth', :path => '../node_modules/react-native-local-auth' 中这样调用 在哪里复制 podspec 文件?在主项目或库中,我遇到错误? @NarendraSingh 正如我上面提到的“从其他 3rd 方库(例如,RNDeviceInfo/etc..)复制 podspec”。只需从您的项目中选择一个 Pod 库,查找其 .podspec 文件并对其进行修改。 但是在哪里粘贴呢? @TommyLeong【参考方案2】:

不久前我也遇到过同样的问题。之后修复:product > scheme > edit scheme,转到构建选项卡并将react 添加为第一个目标。

【讨论】:

您的答案看起来有效,但在添加 React 作为我的目标后,我仍然面临相同的输出。我还尝试再次清理我的构建、Pod 和重新安装 Pod。 我可以与您核实一下您在链接框架和库下是否有任何框架/.a 文件吗? 我唯一有趣的框架是javascriptScore.framework 凯文,感谢您的帮助!我找到了解决问题的答案。也许你也可以看看并提供你的意见:)【参考方案3】:

我遇到了同样的问题,我进入 /node_modules/react-native/React/Base/RCTBridgeModule.h 并将 #import 更改为

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

参考下面的链接

https://github.com/facebook/react-native/issues/26754#issuecomment-539550146

【讨论】:

以上是关于未找到 React/RCTDefines.h' 文件 (RN0.61)的主要内容,如果未能解决你的问题,请参考以下文章

未找到 React/RCTDefines.h 文件

找不到“React / RCTDefines.h”文件。在反应原生推送通知集成中

加载文本文档并根据重复单词的数量对它们进行排名的 Java 程序 - 不断获取文件未找到错误

CLion中运行出现error C3688: 文本后缀“澶”无效;未找到文文本运算符或文本运算符模板“operator “”““澶”

CLion中运行出现error C3688: 文本后缀“澶”无效;未找到文文本运算符或文本运算符模板“operator “”““澶”

CLion中运行出现error C3688: 文本后缀“澶”无效;未找到文文本运算符或文本运算符模板“operator “”““澶”