找不到React / RCTBridgeModule.h文件


115

在xcode上构建本机iOS应用程序时遇到此错误。

在此处输入图片说明

在npm install和rpm链接react-native-fs库之后,开始出现此错误。但是在网上搜索解决方案后,我注意到许多人在安装其他React Native库时遇到了相同的错误。

许多人建议的一种可能的解决方案是,在“构建设置”->“标题搜索路径”下添加以下内容。

$(SRCROOT)/../node_modules/react-native/React -(递归)

但是这种解决方案没有运气,仍然会出现相同的错误


我在v0.41.2中遇到了同样的错误,它应该与<React / RCT ...>一起使用,但它不起作用:/
pgarciacamou

@camou在下面看到我的答案;它可能会有所帮助
Lawrence

@CecilRodriguez您对react-native-fs有什么版本?如果您使用XCode手动添加,请检查github.com/itinance/react-native-fs#adding-manually-in-xcode
Shubham Khatri

我收到此错误:无法解析模块react-native-webrtc
Ankita

Answers:


160

以我为例,当我尝试为iOS归档一个0.40+的react-native应用程序时发生了这个特殊问题(解决方案在这里找到:升级到时,可靠的构建^0.39.2失败^0.40.0)。

发生的是,Xcode试图并行构建react-native库,实际构建react库之前构建具有隐式react依赖关系的库。

我的解决方案是:

  1. 禁用并行构建:

    • Xcode菜单->产品->方案->管理Shemes ...
    • 双击您的应用程序
    • 生成选项卡->取消选中Parallelize Build
  2. 将React添加为项目依赖

    • Xcode Project Navigator->将React.xcodeproj从库中拖到根树中
    • 构建阶段选项卡->目标依赖关系-> +->添加React

1
我发现只有当您从下面升级到本机0.40+时,才会发生这种情况。用0.40+ RN初始化的项目已经关闭了并行构建。
agiaLab

20
“拖到根树”是什么意思?而“构建阶段选项卡” ...这是React.xcodeproj的构建阶段吗?
GreenAsJade

2
当创建新目标后出现此错误时,步骤1就足够了:)
Kepedizer

2
您如何处理世博会退出项目?我什么地方都没有React.xcodeproj,React属于Podfile依赖项
Sebastien Lorber

1
@SebastienLorber打开node_modules并从此处拖动react项目
Ramon Canales

35

确保禁用Parallelise Build并在React目标上方添加目标

在此处输入图片说明


在第一个答案之后,我自己想出了办法,但是加快反应就可以了!不得不意识到这实际上对建筑过程意味着什么
njoye

1
在添加React目标之后拉扯头发并思考我在做什么错,但是将其向上移动就可以了。@njoye您能解释一下这在构建过程中意味着什么吗?谢谢!
尤金·金

@EugeneKim列表中元素的顺序是Apple显示时间顺序的方式(在OSX和iOS上,这经常使我烦恼)。因此,将目标“ React”放置在“ App”之前会从您自己的“ React”构建代码。由于您自己的代码使用React目标,因此这似乎会影响它是否能够构建。可能正在构建文件,然后在目标中使用这些文件。
njoye

我想使用并行构建功能来减少构建时间
utkarsh-devops

25

快速修复(不是最好的)

更改import react-native标题行:

 #import <React/RCTBridgeModule.h>
 #import <React/RCTLog.h>

至:

 #import "RCTBridgeModule.h"
 #import "RCTLog.h"

这是我要尝试使用的库所做的更改的示例:关闭#46-未找到“ RCTBridgeModule.h”文件


16
如果您仔细阅读发行说明,我认为实际上是另一种方式-新的/批准的方式是#import <React/RCT...h>在此处提交
用户

1
我知道这似乎落后于文档的建议,但是#import "RCTBridgeModule.h"今天指定的格式确实对我来说更好。
爪子

对我来说,该错误在文件RCTFileReaderModule.h中标记。我按照建议更改了#import语句,但没有帮助。我在链接的回购请求中看到更改是在RNFSManager.h和RNFSManager.m中完成的。我尝试在这两个文件中制作它,但都没有帮助。知道我在做什么错吗?
Yossi

12

更改

  #import "RCTBridgeModule.h"

 #import "React/RCTBridgeModule.h"

1
非常感谢!!我花了几个小时寻找解决方案。但是这个解决方案是救星。谢谢!
Abhirup Mukherjee


3

如果Libraries/React.xcodeproj在xcode中为红色,则重新安装node_modules

rm -rf node_modules && yarn

我从react-native 0.46.3新建的项目是红色的:当我进行react-native init时,SI的npm 5.3.0和yarn 0.24.5


谢谢,我正在将项目推送到github。当再次克隆它时,我错过了以红色显示的React库。您的命令正在工作。👍–
Rifinio

2

如之前的文章中所述,React-native库的最新版本在此处具有重大的兼容性更改。如果您不打算升级到react-native 0.40+,但是可以强制安装该库的先前版本,例如,使用react-native-fs:

npm install --save -E react-native-fs@1.5.1

2

我能够构建调试,但是无法构建档案。

我通过将React.xcodeproj/ node_modules / react-native / React中找到的内容拖到Xcode的根目录中来解决此问题,然后在构建阶段>目标依赖项中将React添加为目标依赖项。


有没有React.xcodeproj/node_modules/react-native/React
Andrew Koster

@AndrewKoster我遇到了同样的问题
Cecil Rodriguez

@CecilRodriguez我已经设法通过在Xcode中进行编译来解决此问题,方法是添加Cocoapods并将React作为Podfile中的pod添加。但是,一旦尝试在中使用已编译的库react-native run-ios,我会得到Xcode中不会发生的编译错误。完全缺乏相关文档令人沮丧。
Andrew Koster

1
@Yossi不,还没有。我尝试过的所有尝试都没有成功。
Cecil Rodriguez

1
@Yossi不,我尝试过你的。没运气。我认为这与我的本机模块有关
Cecil Rodriguez

2

在React Native 0.60之后,此问题通常是由链接库与新的“自动链接”功能混合引起的。这为我解决了

使用取消旧库的链接

$ react-native unlink react-native-fs

完全使用刷新Pod集成

$ pod deintegrate && pod install

现在重新加载您的工作区并进行干净的构建。


1

pod install为新的依赖项运行命令后,此错误对我显示。除了这些,还安装了React。因此,可能Xcode混淆了路径。我从PodFile中删除了这些行,错误消失了。请注意,从此处删除的内容已在Xcode中链接。

target 'app' do

  pod 'GoogleMaps'
  pod 'Firebase/Auth', '~> 6.3.0'
  pod 'Firebase/Database', '~> 6.3.0'

  # Removed four pods below and it worked.

  pod 'react-native-image-picker', :path => '../node_modules/react-native-image-picker'

  pod 'ReactNativePermissions', :path => '../node_modules/react-native-permissions'

  pod 'react-native-image-resizer', :path => '../node_modules/react-native-image-resizer'

  pod 'RNFS', :path => '../node_modules/react-native-fs'

  end

1

对我来说,当我在应用程序中添加新的方案/目标(app.staging)并使用pod install安装了pods 时,发生了此错误。

发生此问题是由于未为所有目标共享窗格。所以,我需要添加新添加的目标(app.staging)内部Podfile

这是我的Podfile。

platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

target 'app' do
  # Pods for app
  pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
  pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"

  target 'appTests' do
    inherit! :search_paths
    # Pods for testing
  end

  # Pods for staging app // important line below
  target 'app.staging'

  use_native_modules!
end

1

我在使用create-react-native-module创建的任何新模块中都收到此错误。没有发布的解决方案对我有用。

对我有用的是,首先确保yarn在新创建的module文件夹中运行以便创建node_modules/(此步骤可能很明显)。然后,在XCode中,选择Product-> Scheme-> React而不是MyModuleName的默认选择。


+1,为模块开发中的其他新成员添加代码是很重要的,除非您创建有效的podfile并运行,否则其他方案将看不到pod install。create-react-native-module似乎没有为您执行此操作。让我挂了一段时间。但是,一旦我创建了一个有效的podfile并运行了安装程序,这对我就起作用了。
Elliot Rodriguez

1

转到项目中的iOS文件夹并安装pod-

$ pod install

如果您在安装Pod类型命令时遇到任何错误,

$ xcode-select -p

结果应为-/Applications/Xcode.app/Contents/Developer

如果路径不正确,请在Xcode中打开您的iOS项目,然后转到:Xcode-> preferences->命令行工具->选择Xcode

再次安装吊舱,您的问题将得到解决。



0

如果要通过编辑器创建它,请同时打开SMobile.xcscheme

并改变 parallelizeBuildables = "NO"


0

对我来说,以上解决方案都没有用,下面是有效的方法(我已经签出Parallelize Build并添加了React

1. Open XCode --> To Libraries add `$LibraryWhichDoesNotWork.xcodeproj$`
2. Then for your app in the `Build Phases` add to the `Link Binary with Libraries` the file `lib$LibraryWhichDoesNotWork$.a`

0

从0.58.4升级到新的react-native版本0.60.4时遇到了这个问题。我在互联网上找不到的东西对我没有帮助,但我设法使其正常运行:

转到构建设置,搜索“标题搜索路径”,选择条目,然后按DELETE按钮。

我已经覆盖了这些值,并且看起来它们在删除后又恢复为默认值。另外,Cocoapods在以下情况下在终端中通过消息抱怨此问题pod install

[!] The `app [Release]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-app/Pods-app.release.xcconfig'. This can lead to problems with the CocoaPods installation

0

我在做了react-native link不支持RN 0.59+上的自动链接的依赖项手册后遇到了这个问题

解决方案是在Xcode的Libraries文件夹下选择xcodeproj文件,然后在Build Settings中,更改Header Search Paths以添加以下两个(递归):

$(SRCROOT)/../../../ios/Pods/Headers/Public/React-Core
$(SRCROOT)/../../../ios/Pods/Headers/Public

0

如果要保持启用Parallelise Build并避免缺少标头的问题,请在方案中提供一个预构建步骤,以将react标头放入派生数据区域。注意,在这种情况下,构建设置来自React项目。是的,这不是美的事,但它可以完成工作,而且可以节省大量时间。prebuild步骤的输出最终在prebuild.log中。您需要复制的确切头文件将取决于您的项目react-native依赖项,但是您将从中得到了第一要务。

编辑方案=>构建

从环境变量获取派生数据目录,然后复制所需的react标头。

#build_prestep.sh (chmod a+x)
derived_root=$(echo $SHARED_DERIVED_FILE_DIR|sed 's/DerivedSources//1')
react_base_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Base/#1')
react_view_headers=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Views/#1')
react_modules_head=$(echo $PROJECT_FILE_PATH|sed 's#React.xcodeproj#Modules/#1')
react_netw_headers=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Network/#1')
react_image_header=$(echo $PROJECT_FILE_PATH|sed 's#React/React.xcodeproj#Libraries/Image/#1')

echo derived root = ${derived_root}
echo react headers = ${react_base_headers}

mkdir -p ${derived_root}include/React/

find  "${react_base_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_view_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_modules_head}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_netw_headers}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;
find  "${react_image_header}" -type f -iname "*.h" -exec cp {} "${derived_root}include/React/" \;

该脚本确实在构建清理期间被调用-这不是理想的选择。在我的情况下,有一个env变量会更改,使我可以在清理过程中尽早退出脚本。

if [ "$RUN_CLANG_STATIC_ANALYZER" != "NO" ] ; then
    exit 0 
fi


-1

您可以做的正确的事情是:

1)npm uninstall reat-native-fs卸载库

2)npm unlink react-native-fs取消链接库

现在,该库已成功删除,现在在您的项目中再次安装该库,这次手动链接所有内容。有时自动链接会导致此错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.