【问题标题】:Xcode 9 not finding React Native 0.56 or 0.57Xcode 9 找不到 React Native 0.56 或 0.57
【发布时间】:2019-02-17 08:20:59
【问题描述】:

我正在开发我的第一个 React Native NativeModule。一个简单的“你好,世界!” Objective-C 函数只是为了了解它是如何工作的。事情进展得相对顺利,然而,xcode 似乎失去了对所有 React Native 文件的引用。我认为这个问题可能是特定于项目的,所以我使用react-native init TestApp 启动了一个新的TestApp,但是当我打开那个.xcodeproj 文件时,我遇到了同样的问题。

这个新的 TestApp 中的第一个错误出现在 AppDelegate.m 文件中:'React/RCTBundleURLProvider.h' file not found,但正如您所料,它会从那里雪崩。

我昨天大部分时间都在尝试各种可能的解决方案,但无济于事。

这可能是一个错误的线索,但也许不是,但是我注意到每当我在新初始化的项目上第一次打开 .xcodeproj 时,Header Search Paths 是空的。话虽如此,我已经根据我在 StackOverflow、GitHub 等上找到的答案尝试了许多搜索路径,最新的是 $(SRCROOT)/../node_modules/react-native/React

我知道这个问题可能有点含糊,但我们将不胜感激。作为一名 iOS 开发人员,我正在尽我最大的努力对 React Native 持开放态度,但不断遇到诸如此类的问题确实会阻碍这一点。

谢谢!

ps。在这一点上,我想知道重新安装 xcode、node、npm 和 react native 是否是最可靠的解决方案。

为清晰起见进行编辑

首先我运行react-native init TestAppcd TestApp,然后运行npm install。此时我也尝试过运行react-native link

然后我打开ios/TestApp.xcodeproj。在 xcode 执行其通常的索引之后,我将不可避免地在 AppDelegate 中看到红色的'React/RCTBundleURLProvider.h' file not found。有时'React/RCTRootView.' file not found' 也会发生。大多数情况下,即使没有发生第二个警告,didFinishLaunchingWithOptions 中的 RCTRootView * 也不会着色。

如果我尝试像这样创建本机模块:

#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"

@interface Test : NSObject <RCTBridgeModule>

@end

我立即收到'RCTBridgeModule.h' file not found

换句话说,Xcode 没有找到任何 RCT。自动完成不建议任何 RCT。

即使有这些警告,我也可以从 Xcode 或运行 react-native run-ios 运行应用程序。

这个额外的部分,可能相关也可能不相关:

如果我的 App.js 中有 import { NativeModules } from 'react-native'NativeModules 原来是未定义的。

我目前的感觉是,设置中的关键步骤没有在 RN Docs 中列出,并且由于某种原因,其他教程也没有涉及。我在另一台电脑上尝试了同样的结果。

【问题讨论】:

    标签: ios objective-c node.js xcode react-native


    【解决方案1】:

    “标题搜索路径”为空是完全正常的。 RN 正在从 React 项目中公开其标头。如果您转到React.xcodeproj(在库下),您可以看到React 目标具有“复制标头”构建阶段,并且在将库打包为公共标头时会公开这些标头。

    为确保您的应用可以使用标头,请转到您应用的方案并进入 Build 部分 - React 目标应该在列表中并且您应用的目标之前。此外,Parallelize Build 复选框需要关闭。在新的 RN 项目中,它应该像这样开箱即用地设置,但您的项目中可能发生了一些变化,因此值得检查。

    当构建刚刚开始时,尤其是在一个新初始化的项目中,您可能会在构建过程中在 IDE 中看到一些关于公共 React 标头的错误,但是一旦所有 React 第三次都应该消失并解决它们 -派对库构建完成,React 本身被打包。

    如果一切设置正确但仍无法正常工作,请删除 DerivedData 文件夹并重新构建。

    【讨论】:

    • 感谢 Artal,很高兴知道空白标题搜索路径是正常的。很多关于旧版本 RN 的问题误导了我一点。
    • 如果我用react-native init TestApp 构建一个新应用程序并打开xcodeproj,似乎一切都按应有的方式设置,但它不起作用。我可以很好地构建和运行该项目。问题是我不会编码。未找到 RCT 文件。如果我尝试向 RN 公开一个函数,应用程序会崩溃,说模块未定义。目前,在我看来,有些事情在任何特定项目的范围之外都搞砸了。新项目的问题与我正在从事的初始项目完全相同。再次感谢
    • 嘿@RicardoNazario 我现在有点不确定到底是什么问题。如果您说应用程序崩溃,那么它是运行时问题,而不是编译/链接问题,在这种情况下,公开您添加的新类可能会出现问题。如果是这种情况,如果不查看实际代码就不可能知道出了什么问题,但这也有点超出您发布的问题的范围..
    • 抱歉,这绝对超出了问题的范围,而且我目前担心提出这个问题。问题是这样的:当我打开 Xcode 以在 Objective-C 中开发本机模块时,Xcode 找不到任何 React 文件。 AppDelegate 中的所有反应导入都不起作用,我无法在自己的模块中导入 RCTBridgeModule。
    • 我刚刚用react-native init 创建了一个新项目,添加了一个新的原生RCTBridgeModule 并毫无问题地使用它。您说 AppDelegate 中的任何反应导入都不起作用,但在您之前的评论中您说您可以构建和运行该项目,所以再次 - 这很不清楚,它是哪一个?如果它编译并运行,那么在 AppDelegate 中究竟什么不起作用?如果它运行 - 你应该没有问题添加你自己的模块,但它到底是什么不工作令人困惑,对不起
    【解决方案2】:

    终于将原生代码与 react-native 关联起来了! 所以,我还没有真正解决确切的问题,但我设法解决了。

    之前我试图初始化一个 react-native 项目,然后修改初始化中构建的 Xcode 项目。

    我决定按照以下文档从将 react-native 链接到现有 xcode 项目的相反角度解决问题:https://facebook.github.io/react-native/docs/integration-with-existing-apps.html

    通过擦除TestApp/ios 的内容并按照上面链接中的过程,我已经能够在react-native init TestApp 之后重复地将本机代码(swift 和objc)链接到react-native。

    感谢@Artal 提供了一些有关其工作方式的宝贵信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多