`React/RCTBridgeModule.h` 文件未找到

Posted

技术标签:

【中文标题】`React/RCTBridgeModule.h` 文件未找到【英文标题】:`React/RCTBridgeModule.h` file not found 【发布时间】:2017-05-30 12:01:58 【问题描述】:

在 xcode 上构建 react-native ios 应用时遇到此错误。

在 npm install 和 rpm 链接 react-native-fs 库后开始出现此错误。但是在网上搜索解决方案后,我发现很多人在安装其他 react 原生库时遇到了同样的错误。

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

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

但是这个解决方案没有运气,仍然得到同样的错误

【问题讨论】:

我在使用 v0.41.2 时遇到了同样的错误,它应该与 一起使用,但它不是:/ @camou 在下面看到我的回答;它可能会有所帮助 @CecilRodriguez 你有什么版本的 react-native-fs?如果您使用 XCode 手动添加,请检查 github.com/itinance/react-native-fs#adding-manually-in-xcode 我收到此错误:无法解析模块react-native-webrtc 如果你有 M1 芯片,那么这应该可以解决它。 ***.com/a/68275769/2643815 【参考方案1】:

就我而言,当我尝试为 iOS 归档一个 0.40+ react-native 应用程序时发生了这个特殊问题(解决方案在这里找到:Reliable build on ^0.39.2 fails when upgrading to ^0.40.0)。

发生的事情是 Xcode 正在尝试并行构建 react-native 库,并且实际上是在构建具有隐式 react 依赖关系的库before构建反应库。

我的解决方案是:

    禁用并行构建:

    Xcode 菜单 -> 产品 -> 方案 -> 管理 Shemes... 双击您的应用程序 构建选项卡 -> 取消选中并行构建

    将 react 添加为项目依赖项

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

【讨论】:

“拖到根树”是什么意思?还有“构建阶段选项卡”……这是 React.xcodeproj 的构建阶段吗? 创建新目标后出现此错误时,步骤1就足够了:) 您如何处理世博会退出的项目?我在任何地方都没有 React.xcodeproj,React 在 Podfile 依赖项中 谁能澄清“将 React.xcodeproj 从库拖到根树”是什么意思。 作为 React Native 0.64,没有 React.xcodeproj 文件了【参考方案2】:

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

【讨论】:

在第一个答案之后我自己想出来了,但是做出反应就可以了!必须意识到这对构建过程实际上意味着什么 在添加 React 目标后,我一直在想我做错了什么,但将其向上移动就成功了。 @njoye 你能解释一下这在构建过程中意味着什么吗?谢谢! @EugeneKim 列表中元素的顺序是 Apple 显示时间顺序的方式(在 OSX 和 iOS 上,这仍然经常让我感到困惑)。因此,将目标“React”放在“App”之前将在您自己的之前从“React”构建代码。由于您自己的代码使用 React 目标,这似乎会影响它是否能够被构建。可能有正在构建的文件然后在您的目标中使用。 我想使用并行构建功能来减少构建时间【参考方案3】:

快速修复(不是最好的)

更改导入 react-native 标题行:

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

收件人:

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

这是我必须对我尝试使用的库进行更改的示例:Closes #46 - 'RCTBridgeModule.h' file not found。

【讨论】:

如果你仔细阅读发行说明,我认为它实际上是另一种方式——新的/批准的方式是#import &lt;React/RCT...h&gt;? commit here 我知道它似乎倒退到了文档推荐的内容,但指定格式 #import "RCTBridgeModule.h" 今天确实对我更有效。 在文件 RCTFileReaderModule.h 中标记了我的错误。我按照建议更改了#import 语句,但没有帮助。我在链接的 repo 拉取请求中看到更改是在 RNFSManager.h 和 RNFSManager.m 中完成的。我尝试在这两个文件中制作它,但它也没有帮助。知道我做错了什么吗? 但是我的代码在#import "RCTBridgeModule.h"...【参考方案4】:

改变

  #import "RCTBridgeModule.h"

 #import "React/RCTBridgeModule.h"

【讨论】:

【参考方案5】:

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

出现此问题是因为并非所有目标都共享 pod。所以我需要在 Podfile 中添加新添加的目标(app.staging)。

这是我的 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

【讨论】:

帮了我!我还需要在 pod 安装后清理项目【参考方案6】:

对于在将 React Native 升级到 0.40+ 后出现此错误的查看器,您可能需要在命令行上运行 react-native upgrade

【讨论】:

我正在尝试这个。改用react-native-git-upgrade 怎么样? 对,这是另一种选择。我认为它们都会起作用。【参考方案7】:

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

rm -rf node_modules && yarn

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

【讨论】:

谢谢,我正在将我的项目推送到 github。当再次克隆它时,我错过了以红色显示的 React 库。你的命令有效。 ?【参考方案8】:

如之前的帖子和here 中所述,最新版本的 react-native 库具有重大的兼容性更改。如果您不打算升级到 react-native 0.40+,但您可以强制安装以前版本的库,例如使用 react-native-fs:

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

/node_modules/react-native/React 中没有 React.xcodeproj @AndrewKoster 我遇到了同样的问题 @CecilRodriguez 我在 Xcode 中编译时设法解决了这个问题,方法是添加 Cocoapods 并将 React 作为 Podfile 中的 pod 添加。但是,一旦我尝试使用 react-native run-ios 中的编译库,我就会遇到 Xcode 中不会发生的编译错误。完全缺乏相关文档令人沮丧。 @Yossi 不,还没有。我尝试过的所有尝试都没有奏效。 @Yossi 不,我试过你的。没有运气。我认为这与我的本机模块有关【参考方案10】:

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

使用取消链接旧库

$ react-native unlink react-native-fs

完全使用刷新 Pods 集成

$ pod deintegrate && pod install

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

【讨论】:

【参考方案11】:

在我为新的依赖项运行 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

【讨论】:

【参考方案12】:

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

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

【讨论】:

+1,重要的是要为其他刚接触模块开发的人添加,在创建有效的 podfile 并运行 pod install 之前,您不会看到其他方案。 create-react-native-module 似乎不会为您执行此操作。让我挂了一会儿。但是一旦我创建了一个有效的 podfile 并运行了安装,这对我有用。【参考方案13】:

进入项目中的 iOS 文件夹并安装 pod -

$ pod install

如果您在安装 pod type 命令时遇到任何错误-

$ xcode-select -p

结果应该是 - /Applications/Xcode.app/Contents/Developer

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

然后再次安装 pod,您的问题将得到解决。

【讨论】:

【参考方案14】:

anhdevit 在https://github.com/facebook/react-native/issues/24363#issuecomment-488547280 中的建议对我有用:

In your terminal, run: defaults delete com.apple.dt.Xcode

【讨论】:

【参考方案15】:

我的解决方案是删除Libraries 中的所有内容,如here 所述

【讨论】:

【参考方案16】:

如果您想从编辑器中创建它,还请打开 SMobile.xcscheme

并更改parallelizeBuildables = "NO"

【讨论】:

【参考方案17】:

对我来说,上述解决方案没有任何效果,下面是有效的(我已经检查了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`

【讨论】:

【参考方案18】:

我在从 0.58.4 升级到新的 react-native 版本 0.60.4 时遇到了这个问题。我在互联网上找到的任何东西都没有帮助我,但我设法让它工作:

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

我覆盖了这些值,看起来它们在删除后又回到了默认值。在pod install 之后,Cocoapods 也在终端中通过消息抱怨它:

[!] 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

【讨论】:

【参考方案19】:

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

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

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

【讨论】:

【参考方案20】:

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

从环境变量中获取派生数据目录并复制所需的反应标头。

#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_rootinclude/React/

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

在构建清理期间确实会调用该脚本 - 这并不理想。在我的情况下,有一个 env 变量会发生变化,让我在清理过程中尽早退出脚本。

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

【讨论】:

【参考方案21】:

你可以做的是:

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

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

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

【讨论】:

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

RN-iOS 原生向RN发送消息....

RN-iOS 原生向RN发送消息....

方法不是公认的客观 c 方法

RN与IOS原生双向通信以及UI绑定通信的使用方式