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

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

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

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

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

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

【问题讨论】:

标签: ios xcode reactjs native react-native-ios


【解决方案1】:

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

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

我的解决方案是:

  1. 禁用并行构建:

    • Xcode 菜单 -> 产品 -> 方案 -> 管理 Shemes...
    • 双击您的应用程序
    • 构建选项卡 -> 取消选中并行构建
  2. 将 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_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
                        

                        【讨论】:

                          【解决方案21】:

                          你可以做的是:

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

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

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

                          【讨论】:

                            猜你喜欢
                            • 2020-01-25
                            • 1970-01-01
                            • 2019-05-01
                            • 2019-08-10
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2021-04-18
                            相关资源
                            最近更新 更多