在标头未找到错误中创建新的构建配置
Posted
技术标签:
【中文标题】在标头未找到错误中创建新的构建配置【英文标题】:Creating New Build Configuration Results in Header Not Found Error 【发布时间】:2017-01-16 20:45:44 【问题描述】:在 Xcode 中,我创建了一个新的 Staging
构建配置。我复制了Release
配置来实现它。 Release
和 Debug
配置都构建得很好。当我选择 Staging
配置时,我最终会遇到标题问题。 我已检查构建设置以确保所有三个配置具有相同的标题搜索路径。
作为一个重要的旁注,问题出现在我拥有的几个相互引用的库之间。
具体来说,我正在使用一个名为 CodePush 的库,它像这样引用 React 库:
#if __has_include("RCTEventEmitter.h")
#import "RCTEventEmitter.h"
#else
#import "React/RCTEventEmitter.h"
#endif
tern 中的RCTEventEmitter.h
文件中的哪个#import <React/RCTBridge.h>
并且是RCTBridge 文件中找不到头文件的来源。
我正在使用 react native 0.40 和 react-native-code-push 1.16.1-beta。
关于可能导致问题的任何想法。如果您需要更多信息,请告诉我,我很乐意提供。我想提一下,我认为这不是图书馆的问题,而是我的设置问题。我怀疑这只是编译器命中的第一个库。
【问题讨论】:
【参考方案1】:问题在于 RN 0.40 处理标头的方式。 React 只知道 Release 和 Debug,因此您必须将 Release 标头路径添加到您的暂存配置中,并确保首先将 React 作为依赖项构建。
方案:
转到Product->Scheme->Manage Schemes
。
双击您的方案。就我而言,我制定了一个 staging 方案并
在 Run 部分将构建配置设置为 Staging。
然后在 Build 部分中,确保 Parallelize Build 已关闭
确保 React 构建目标在目标列表中。如果不,
点击 + 按钮,添加它,然后将其拖到顶部。然后点击关闭。
目标依赖:
现在在导航器中选择您的目标,转到 Build Phases,然后 在 Target Dependencies 下添加 React。这可以确保 XCode 在项目的其余部分之前构建 React。标题路径:
在导航器中选择您的目标,转到构建设置。 点击+,添加自定义设置REACT_HEADERS_PATH
,并将值设置为$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include
。它应该解析为build/Release-iphoneos/include
然后仍然在 Build Settings 中,向上滚动到 Header Search Paths 并将 $(REACT_HEADERS_PATH)
添加到仅用于 Staging 配置的列表中。
现在清理并构建...
经过 2 天的努力,我找到了这个解决方案 here on Github。所有功劳归于该评论的作者。
【讨论】:
我怎么没看到那个帖子。我花了几天时间试图弄清楚这一点。你太棒了!!!非常感谢!!!!!!!!!我对此已经放弃了希望,只是使用发布构建配置 我知道你的痛苦 :) - 最后我去了 github 上的 react native issues github 页面并在过滤框中输入了“staging”【参考方案2】:上面的解决方案对我不起作用。这可能会帮助某人。
-
在 XCode 中打开您的项目。
打开库文件夹。你应该看到 React.xcodeproj 和几个 RCT*.xcodeproj。
将 React.xcodeproj 拖到其他每个项目中。
单击每个项目并导航到“构建阶段”选项卡。
单击 Target Dependencies 并将 React 添加为目标依赖项
【讨论】:
以上是关于在标头未找到错误中创建新的构建配置的主要内容,如果未能解决你的问题,请参考以下文章
在 Record<string, string> 中创建新属性表示可以未定义新值