在 codepush 和 cocoapods 中找不到 React/RCTEventEmitter.h

Posted

技术标签:

【中文标题】在 codepush 和 cocoapods 中找不到 React/RCTEventEmitter.h【英文标题】:React/RCTEventEmitter.h not found with codepush and cocoapods 【发布时间】:2019-03-13 21:28:34 【问题描述】:

在诊断我的 ios 反应原生构建失败的原因时,我遇到了很大的问题。在诊断了一些其他错误之后,我现在面临的问题是,无论我尝试什么,错误 React/RCTEventEmitter.h not found 困扰着我和我的应用程序。这只是 react-native init 创建的一个基本的 react-native 应用程序。

我几乎尝试了以下所有组合:

更改“标题搜索路径” 删除创建的 xcode/DeriveData 文件夹 “分解”吊舱 pod 安装 将 react-native-code-push xcodeproject/library 直接拖放到我在 xbox 中 Libraries 中的应用 xcode 清理 react-native 链接 react-native 链接代码推送 从 Podfile 中移除 codepush 删除 ios/Pods 文件夹 删除 ios/Podfile.lock 文件 使用 xcodebuild 手动构建应用程序(同样的错误)
/usr/bin/xcodebuild -sdk iphoneos -workspace ios/myApp.xcworkspace -scheme myApp  archive -archivePath myApp.xcarchive -UseModernBuildSystem=NO CODE_SIGNING_ALLOWED=NO

我的反应信息如下(它是一个 macOS 虚拟机):

    System:
      OS: macOS High Sierra 10.13.1
      CPU: (4) x64 AMD Ryzen 7 1700X Eight-Core Processor         
      Memory: 102.70 MB / 4.00 GB
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 11.11.0 - ~/.nvm/versions/node/v11.11.0/bin/node
      Yarn: 1.13.0 - ~/.nvm/versions/node/v11.11.0/bin/yarn
      npm: 6.7.0 - ~/.nvm/versions/node/v11.11.0/bin/npm
    SDKs:
      iOS SDK:
        Platforms: iOS 11.2, macOS 10.13, tvOS 11.2, watchOS 4.2
    IDEs:
      Xcode: 9.2/9C40b - /usr/bin/xcodebuild
    npmPackages:
      react: 16.4.1 => 16.4.1 
      react-native: 0.57.0-rc.0 => 0.57.0-rc.0 
    npmGlobalPackages:
      react-native-cli: 2.0.1
      react-native: 0.58.6

我的 Podfile 是:

target 'myApp' do
  # Pods for AppCenter
  pod 'AppCenter/Crashes', '~> 1.13.0'
  pod 'AppCenter/Analytics', '~> 1.13.0'
  pod 'AppCenterReactNativeShared', '~> 1.12.0'
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for myApp


  platform :ios, '9.0'
  pod 'CodePush', :path => '../node_modules/react-native-code-push'

end

我面临的确切错误是:

/Users/administrator/Desktop/BUILD/myApp/node_modules/react-native-code-push/ios/CodePush/CodePush.h:6:9: fatal error: 'React/RCTEventEmitter.h' file not found
#import "React/RCTEventEmitter.h"   // Required when used as a Pod in a Swift project

虽然我对 iOS 开发很陌生,但似乎我上面所做的事情应该可以解决问题,但事实并非如此。错误似乎很明显,但我不知道还能做什么。

我知道有很多关于这个问题的文章,但我看到的大多数文章/问题都是可以解决的,但由于某种原因,我面临的具体情况似乎非同寻常。我想知道是否有人有任何其他提示或面临这样的问题?非常感谢任何帮助!

【问题讨论】:

所以每次使用react-native init创建项目时都会出现这个错误? 尝试使用 react-native 升级 【参考方案1】:

at this line 触发错误,仅当在 Swift 项目中用作 Pod 时才需要此错误

#import "React/RCTEventEmitter.h"   // Required when used as a Pod in a Swift project

问题好像是这个pull request引起的,建议你使用兼容react-native 0.57的最新版react-native-code-push@5.6

尝试以下方法解决问题

1) 确保您为Swift 正确配置了Podfile 如果您使用的是 swift,请在 podfile 中添加 use_frameworks!

# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
use_frameworks!

2) 重新安装并配置react-native-code-push 到最新版本5.6

npm uninstall react-native-code-push
npm install --save react-native-code-push@5.6.0

关注ios setup 和plugin configuration

4) 安装app center as by instructions

如果问题没有解决

5) Add the following line 到 node_modules/react-native-code-push/ios/CodePush/CodePush.h

#import "React/RCTEventEmitter.h"

#import "RCTEventEmitter.h"

#import <React/RCTEventEmitter.h>

如果上述解决方案不能解决问题

6)Remove the following line from ios/AppDelegate.m

#import "CodePush.h"

and add

#import <CodePush/CodePush.h>

问题是由node_modules/react-native-code-push/blob/master/ios/CodePush/CodePush.h 的以下行引起的。 所有if 语句都失败(意味着这些类不可用)并且line 6 正在执行。

line 1 #if __has_include(<React/RCTEventEmitter.h>)
line 2 #import <React/RCTEventEmitter.h>
line 3 #elif __has_include("RCTEventEmitter.h")
line 4 #import "RCTEventEmitter.h"
line 5 #else
line 6 #import "React/RCTEventEmitter.h"   // Required when used as a Pod in a Swift project
line 7 #endif

我很乐意帮助您进一步解决此问题

【讨论】:

【参考方案2】:

我在将 CodePush 与 RNPM 和 CocoapPods 集成时遇到了相同/类似的问题。

我建议您手动安装它,option 3。第一次尝试就成功了。

我正在处理一个非常大的项目,并且在 iOS 上遇到了类似的问题。解决我的问题的是删除构建服务器所在机器的“全局”缓存。另外,尝试删除 Xcode 存档和派生数据;和 Podfile.lock。

【讨论】:

【参考方案3】:

按照这些步骤进行

    更新 RNFirebase(如果不是最新版本) 关闭并行化 在 Xcode 导航器中选择 RNFirebase.xcodeproj 库 选择Build Phases 标签 在使用库链接二进制文件下,​​添加 Pods_projectName.framework文件

如果不起作用,请打开并行化并重试

您需要确保在 RNFirebase 之前构建 Pod。

【讨论】:

【参考方案4】:

这个问题必须这样解决

查找并删除所有AppCenter的引用(使用Cmd-F快捷键) 重新安装软件包 从 Terminal/ ... / ios / ... / 文件夹中运行 pod install 命令

希望这会有所帮助。

【讨论】:

以上是关于在 codepush 和 cocoapods 中找不到 React/RCTEventEmitter.h的主要内容,如果未能解决你的问题,请参考以下文章

在添加的 CocoaPods 项目中找不到一些导入

我的 AppCenter 失败并出现错误“在项目目录中找不到 `Podfile'”并且我的项目不使用 cocoapods

CocoaPods找不到pod“React / BatchedBridge”的兼容版本

CodePush热更新组件详细接入教程

带有 Core Data 的 Cocoa pod 在消费应用程序中找不到实体

重命名默认的 Cocoapods 项目