`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 时遇到了同样的错误,它应该与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 <React/RCT...h>
? 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` 文件未找到的主要内容,如果未能解决你的问题,请参考以下文章