136

在 xcode 上构建 react-native iOS 应用程序时出现此错误。

在此处输入图像描述

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

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

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

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

4

21 回答 21

167

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

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

我的解决方案是:

  1. 禁用并行构建:

    • Xcode 菜单 -> 产品 -> 方案 -> 管理Shemes...
    • 双击您的应用程序
    • 构建选项卡 - >取消选中并行构建
  2. 添加反应作为项目依赖

    • Xcode Project Navigator -> 将 React.xcodeproj 从库拖到根树
    • 构建阶段选项卡 -> 目标依赖项 -> + -> 添加React
于 2017-04-11T08:38:49.457 回答
36

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

在此处输入图像描述

于 2018-09-20T13:14:37.390 回答
28

快速修复(不是最好的)

更改导入 react-native 标题行:

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

至:

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

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

于 2017-01-15T17:24:49.030 回答
15

改变

  #import "RCTBridgeModule.h"

 #import "React/RCTBridgeModule.h"
于 2018-07-07T21:09:54.737 回答
4

对我来说,当我在应用程序中添加新的方案/目标 ( 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
于 2019-11-23T12:58:46.710 回答
3

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

于 2017-02-18T04:09:34.933 回答
3

如果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

于 2017-07-15T16:46:52.560 回答
2

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

npm install --save -E react-native-fs@1.5.1
于 2017-01-18T19:23:02.783 回答
2

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

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

于 2017-06-27T05:27:22.987 回答
2

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

使用取消链接旧库

$ react-native unlink react-native-fs

完全使用刷新 Pods 集成

$ pod deintegrate && pod install

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

于 2020-01-22T20:56:16.167 回答
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
于 2019-07-10T17:07:28.957 回答
1

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

$ pod install

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

$ xcode-select -p

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

如果路径不正确,则在 Xcode 中打开您的 iOS 项目并转到:Xcode->preferences->command line tools-> 选择 Xcode

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

于 2019-08-17T08:27:48.020 回答
1

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

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

于 2020-01-23T17:19:20.380 回答
1

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

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

于 2020-04-27T10:18:43.520 回答
1

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

于 2021-04-15T13:24:40.447 回答
0

如果您想从您的编辑器中制作它,还请打开SMobile.xcscheme

并改变parallelizeBuildables = "NO"

于 2019-03-26T09:22:50.067 回答
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`
于 2019-05-16T07:34:09.707 回答
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
于 2019-07-26T11:35:34.400 回答
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
于 2020-02-23T20:01:53.247 回答
0

如果您想保持启用 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
于 2020-03-17T13:15:15.660 回答
-2

您可以做的事情是:

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

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

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

于 2017-01-15T16:00:17.557 回答