在 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的主要内容,如果未能解决你的问题,请参考以下文章
我的 AppCenter 失败并出现错误“在项目目录中找不到 `Podfile'”并且我的项目不使用 cocoapods
CocoaPods找不到pod“React / BatchedBridge”的兼容版本