作者:雅婷婉君323 | 来源:互联网 | 2023-02-06 16:43
在我的应用程序中,我成功使用了Firebase,在AppDelegate中我进行了设置:
// ### Initialize Firebase
FIRApp.configure()
现在我对相关目标进行一些单元测试,当我启动它时,我得到错误:
2017-04-14 14:53:22.351 MyProject[28753] [Firebase/Core][I-COR000004] App with name __FIRAPP_DEFAULT does not exist.
2017-04-14 14:53:22.354 MyProject[28753] [Firebase/Messaging][I-IID001000] Firebase is not set up correctly. Sender ID is nil or empty.
2017-04-14 14:53:22.356 MyProject[28753] [Firebase/Analytics][I-ACS023007] Firebase Analytics v.3800000 started
2017-04-14 14:53:22.356 MyProject[28753] [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled
2017-04-14 14:53:22.381 MyProject[28753:712475] *** Terminating app due to uncaught exception 'com.firebase.instanceid', reason: 'Could not configure Firebase InstanceID. Google Sender ID must not be nil or empty.'
版本:
Firebase/Core (3.16.0)
Firebase/Messagging (3.16.0)
有什么建议?
1> Michal Klein..:
我刚刚注意到它开始发生在我身上,我的travis版本因Firebase 3.16而失败.我降级到3.7.1,这是我以前在项目中的版本,它再次运行.
我没有时间去研究它,但这是一个快速修复.它可能是Firebase错误,或者它们可能已经改变了某些内容,现在设置也不同了.
编辑:显然回滚到3.15工作得很好.
2> markshiz..:
从Firebase开始,3.16.0
Google Firebase似乎没有GoogleService-Info.plist
从单元测试版本中获取,即使plist
它包含在应用和单元测试目标中.这似乎没有得到解决3.17.0
.正如其他人所指出的,降级3.15.0
似乎回避了这个问题.
但对于许多人来说,单元测试期间Firebase的初始化可能没有必要,实际上是无意的 - 例如,您可能不希望Firebase报告单元测试崩溃.在这些情况下,您可以FIRApp.configure()
通过以下方式轻松添加防护,以便在运行单元测试时不初始化它:
import Foundation
func isUnitTesting() -> Bool {
return ProcessInfo.processInfo.environment["TEST"] != nil
}
if !isUnitTesting() {
FIRApp.configure()
}
那么一定要定义环境变量TEST=1
只在您的测试方案.
3> Rizwan Satta..:
可能的原因
这可能是由于您的Pod依赖关系的设置方式而发生的.您是否看到来自Xcode的关于两个类中定义的多个实现的警告,例如:
objc[54869]: Class FIRApp is implemented in both /Users/hli/Library/Developer/CoreSimulator/Devices/7766B001-8A5F-43B6-8860-5D36E8DC452C/data/Containers/Bundle/Application/8A18B716-D1D2-4110-83E2-9AE577A034CD/FirebaseDemo.app/FirebaseDemo (0x10d306d30) and /Users/hli/Library/Developer/Xcode/DerivedData/FirebaseDemo-ddfdueufgmkxwzameiwbuhnokgax/Build/Products/Debug-iphonesimulator/FirebaseDemo.app/PlugIns/FirebaseDemoTests.xctest/FirebaseDemoTests (0x11df8cbb0). One of the two will be used. Which one is undefined.
如果是这样,这意味着您可能需要调整pod依赖项配置.由于XCTest目标实际上也引入了主机应用程序的目标,因此可以获得同一对象的多个导入.在这种情况下,FIRApp正在初始化实例ID,但它导致实例ID与另一个 FIRApp进行核对,后者说它没有配置.这解释了为什么它崩溃说它无法找到初始化它的应用程序.
请参阅morganchen12 @在Github上的回答,看一个正确的Podfile示例.
原答案如下:
因此,这可能有两个原因:
Firebase无法GoogleService-Info.plist
在您的单元测试主机应用程序包中找到您,或者
该GoogleService-Info.plist
文件要么缺少GCM_SENDER_ID
密钥,要么其中包含空值.
我们可以很容易地消除(2) - 你可以检查你的GoogleService-Info.plist
文件,看它是否有一个有效的外观GCM_SENDER_ID
(它将是一堆数字,如3252652634).
我将研究为什么GoogleService-Info.plist
3.15.x与3.16.0及更高版本相比可以找到它.
此外,正如@markshiz所说,您可能实际上不希望Firebase在您的应用程序的单元测试期间启动.您可以FIRApp.configure()
通过检查应用程序是否作为单元测试运行来将您的调用置于if语句后面.
为了帮助调试此问题,您是否可以使用环境变量-FIRDebugEnabled
集运行测试应用程序?输出结果非常有用.