找不到“React / RCTBridgeModule.h”文件

时间:2017-01-15 15:47:31

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

在xcode上构建反应原生iOS应用时出现此错误。

enter image description here

在npm install和rpm链接react-native-fs库之后开始收到此错误。但在网上搜索解决方案后,我注意到许多人在安装其他反应原生库时遇到了同样的错误。

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

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

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

22 个答案:

答案 0 :(得分:107)

在我的情况下,当我尝试为iOS归档0.40+ react-native应用程序时,发生了这个特殊问题(解决方案在这里找到:https://github.com/facebook/react-native/issues/11721#issuecomment-270672904)。

Xcode 正在尝试并行构建反应原生库,正在构建具有隐式反应依赖关系的库 >在实际构建反应库之前。

我的解决方案是:

  1. 禁用并行构建:

    • Xcode菜单 - >产品 - >方案 - >管理Shemes ......
    • 双击您的申请
    • 构建标签 - >取消选中Parallelize Build
  2. 将反应添加为项目依赖性

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

答案 1 :(得分:22)

QUICK FIX(不是最好的)

更改导入react-native标题行: #import <React/RCTBridgeModule.h> #import <React/RCTLog.h>

要: #import "RCTBridgeModule.h" #import "RCTLog.h"

以下是我必须为我尝试使用的库所做的更改示例:https://github.com/johanneslumpe/react-native-fs/pull/238/files

答案 2 :(得分:17)

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

enter image description here

答案 3 :(得分:7)

更改

import pandas as pd
import numpy as np

data={ 
      'Value': [
                   'NFLX','FB','GOOG','VZ',np.nan,'MSFT','AMZN'
                   ,np.nan,'MSFT',np.nan,'MSFT','INTC','AAPL'
                   ,np.nan,'AMZN','FB'
               ]
     }

df=pd.DataFrame(data,columns=['Value'])

df['Count_Non_Null'] = False
df['Count_Nulls'] = False

print (df)

  #import "RCTBridgeModule.h"

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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

rm -rf node_modules && yarn

我新创建的来自react-native 0.46.3的项目是红色的:当我做反应时,我有npm 5.3.0和纱线0.24.5本地init

答案 6 :(得分:2)

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

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

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

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

如果您在安装Pod类型命令时遇到任何错误, $ xcode-select -p

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

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

然后再次安装Pod,即可解决您的问题。

享受,

答案 9 :(得分:2)

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

使用以下方法取消链接旧库

$ react-native unlink react-native-fs

完全使用刷新Pod集成

$ pod deintegrate && pod install

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

答案 10 :(得分:1)

https://github.com/facebook/react-native/issues/24363#issuecomment-488547280

anhdevit的建议对我有用:

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

答案 11 :(得分:1)

您只需要安装pod,如果pod文件存在,只需键入

pod install

如果不是: 所以首先,

pod init

然后

pod install

在终端中。而且你很好。

答案 12 :(得分:1)

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

Edit Scheme => Build

从环境变量获取派生数据目录,然后复制所需的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

答案 15 :(得分: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

答案 16 :(得分:0)

对我来说,当我在应用中添加新的方案/目标( 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

答案 17 :(得分:0)

从0.58.4升级到新的本地本机版本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

答案 18 :(得分:0)

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

答案 19 :(得分: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`

答案 20 :(得分:0)

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

然后更改parallelizeBuildables = "NO"

答案 21 :(得分:-1)

你能做的就是:

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

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

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