在标头未找到错误中创建新的构建配置

Posted

技术标签:

【中文标题】在标头未找到错误中创建新的构建配置【英文标题】:Creating New Build Configuration Results in Header Not Found Error 【发布时间】:2017-01-16 20:45:44 【问题描述】:

在 Xcode 中,我创建了一个新的 Staging 构建配置。我复制了Release 配置来实现它。 ReleaseDebug 配置都构建得很好。当我选择 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> 中创建新属性表示可以未定义新值

iAd 测试广告未显示

是否可以从仪表板小部件中创建新的小部件实例?

为什么我在django中创建新模型类时出错?

在 Oracle SQL Developer 中创建新数据库和新连接

即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?