必须先配置默认FirebaseApp实例,然后才能初始化defaultFirebaseApp实例 [英] The default FirebaseApp instance must be configured before the defaultFirebaseApp instance can be initialized

查看:160
本文介绍了必须先配置默认FirebaseApp实例,然后才能初始化defaultFirebaseApp实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 FirebaseApp.configure()配置Firebase,但遇到以下崩溃:

I am trying to configure the Firebase using FirebaseApp.configure() but facing the following crash:

 *** Terminating app due to uncaught exception 'com.firebase.installations', reason: 'The default FirebaseApp instance must be configured before the defaultFirebaseApp instance can be initialized. One way to ensure that is to call `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) in the App Delegate's `application:didFinishLaunchingWithOptions:` (`application(_:didFinishLaunchingWithOptions:)` in Swift).'
*** First throw call stack:
(0x195b7180c 0x195899fa4 0x195a66f84 0x1081413dc 0x107c59bc0 0x107c59aec 0x10274daa0 0x10274d5c0 0x10274c8ec 0x10274c310 0x10274c25c 0x10244b52c 0x10244b434 0x10244b5c4 0x199bda698 0x102451ad4 0x195974360)
libc++abi.dylib: terminating with uncaught exception of type NSException

我尝试调用 FirebaseApp.configure() AppDelegate didFinishLaunchingWithOptions 内部以及 init 内部以及c>:

I tried calling FirebaseApp.configure() from inside didFinishLaunchingWithOptions and inside the init of AppDelegate as well:

override init() {
        super.init()

        // Setting up the firebase instance
        setupFirebase()
    }

private func setupFirebase() {

        FirebaseApp.configure()

        Messaging.messaging().delegate = self    
    }

此刻崩溃-

It's crashing at this point -

我正在使用 import FirebaseCore &在我的 AppDelegate

I am using import FirebaseCore & import FirebaseMessaging inside my AppDelegate

Podfile.lock 看起来像这样

Firebase/Core (6.20.0):
    - Firebase/CoreOnly
    - FirebaseAnalytics (= 6.3.1)
  - Firebase/CoreOnly (6.20.0):
    - FirebaseCore (= 6.6.4)
  - Firebase/Database (6.20.0):
    - Firebase/CoreOnly
    - FirebaseDatabase (~> 6.1.4)
  - Firebase/Firestore (6.20.0):
    - Firebase/CoreOnly
    - FirebaseFirestore (~> 1.11.2)
  - Firebase/Messaging (6.20.0):
    - Firebase/CoreOnly
    - FirebaseMessaging (~> 4.3.0)
  - FirebaseAnalytics (6.3.1):
    - FirebaseCore (~> 6.6)
    - FirebaseInstallations (~> 1.1)
    - GoogleAppMeasurement (= 6.3.1)
    - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
    - GoogleUtilities/MethodSwizzler (~> 6.0)
    - GoogleUtilities/Network (~> 6.0)
    - "GoogleUtilities/NSData+zlib (~> 6.0)"
    - nanopb (= 0.3.9011)
  - FirebaseAnalyticsInterop (1.5.0)
  - FirebaseAuthInterop (1.1.0)
  - FirebaseCore (6.6.4):
    - FirebaseCoreDiagnostics (~> 1.2)
    - FirebaseCoreDiagnosticsInterop (~> 1.2)
    - GoogleUtilities/Environment (~> 6.5)
    - GoogleUtilities/Logger (~> 6.5)
  - FirebaseCoreDiagnostics (1.2.2):
    - FirebaseCoreDiagnosticsInterop (~> 1.2)
    - GoogleDataTransportCCTSupport (~> 2.0)
    - GoogleUtilities/Environment (~> 6.5)
    - GoogleUtilities/Logger (~> 6.5)
    - nanopb (~> 0.3.901)
  - FirebaseCoreDiagnosticsInterop (1.2.0)
  - FirebaseDatabase (6.1.4):
    - FirebaseAuthInterop (~> 1.0)
    - FirebaseCore (~> 6.0)
    - leveldb-library (~> 1.22)
  - FirebaseFirestore (1.11.2):
    - abseil/algorithm (= 0.20190808)
    - abseil/base (= 0.20190808)
    - abseil/memory (= 0.20190808)
    - abseil/meta (= 0.20190808)
    - abseil/strings/strings (= 0.20190808)
    - abseil/time (= 0.20190808)
    - abseil/types (= 0.20190808)
    - FirebaseAuthInterop (~> 1.0)
    - FirebaseCore (~> 6.2)
    - "gRPC-C++ (= 0.0.9)"
    - leveldb-library (~> 1.22)
    - nanopb (~> 0.3.901)
  - FirebaseInstallations (1.1.0):
    - FirebaseCore (~> 6.6)
    - GoogleUtilities/UserDefaults (~> 6.5)
    - PromisesObjC (~> 1.2)
  - FirebaseInstanceID (4.3.2):
    - FirebaseCore (~> 6.6)
    - FirebaseInstallations (~> 1.0)
    - GoogleUtilities/Environment (~> 6.5)
    - GoogleUtilities/UserDefaults (~> 6.5)
  - FirebaseMessaging (4.3.0):
    - FirebaseAnalyticsInterop (~> 1.5)
    - FirebaseCore (~> 6.6)
    - FirebaseInstanceID (~> 4.3)
    - GoogleUtilities/AppDelegateSwizzler (~> 6.5)
    - GoogleUtilities/Environment (~> 6.5)
    - GoogleUtilities/Reachability (~> 6.5)
    - GoogleUtilities/UserDefaults (~> 6.5)
    - Protobuf (>= 3.9.2, ~> 3.9)

这是什么他的堆栈跟踪看起来像:

Here's what the stack trace looks like:

 thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x0000000195969ec4 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000195885774 libsystem_pthread.dylib`pthread_kill$VARIANT$mp + 112
    frame #2: 0x00000001957d9844 libsystem_c.dylib`abort + 100
    frame #3: 0x00000001959327d4 libc++abi.dylib`abort_message + 128
    frame #4: 0x00000001959329c4 libc++abi.dylib`demangling_terminate_handler() + 296
    frame #5: 0x000000019589a258 libobjc.A.dylib`_objc_terminate() + 124
    frame #6: 0x000000019593f304 libc++abi.dylib`std::__terminate(void (*)()) + 16
    frame #7: 0x000000019593ec58 libc++abi.dylib`__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*) + 32
    frame #8: 0x000000019593ec18 libc++abi.dylib`__cxa_throw + 124
    frame #9: 0x000000019589a0d0 libobjc.A.dylib`objc_exception_throw + 356
    frame #10: 0x0000000195a66f84 CoreFoundation`+[NSException raise:format:] + 108
  * frame #11: 0x0000000107f993dc LocationTrackingFW`+[FIRInstallations installations](self=FIRInstallations, _cmd="installations") at FIRInstallations.m:159:5
    frame #12: 0x0000000107ab1bc0 LocationTrackingFW`+[FIRAnalytics updateFirebaseInstallationID] + 32
    frame #13: 0x0000000107ab1aec LocationTrackingFW`+[FIRAnalytics startWithConfiguration:options:] + 564
    frame #14: 0x00000001025cdac0 Field Service`-[FIRApp configureCore](self=0x0000000280a1b510, _cmd="configureCore") at FIRApp.m:364:9
    frame #15: 0x00000001025cd5e0 Field Service`+[FIRApp addAppToAppDictionary:](self=0x00000001035a2f20, _cmd="addAppToAppDictionary:", app=0x0000000280a1b510) at FIRApp.m:317:7
    frame #16: 0x00000001025cc90c Field Service`+[FIRApp configureWithName:options:](self=0x00000001035a2f20, _cmd="configureWithName:options:", name=@"__FIRAPP_DEFAULT", options=0x0000000280a1b750) at FIRApp.m:202:5
    frame #17: 0x00000001025cc330 Field Service`+[FIRApp configureWithOptions:](self=0x00000001035a2f20, _cmd="configureWithOptions:", options=0x0000000280a1b750) at FIRApp.m:145:3
    frame #18: 0x00000001025cc27c Field Service`+[FIRApp configure](self=0x00000001035a2f20, _cmd="configure") at FIRApp.m:131:3
    frame #19: 0x00000001022cb54c Field Service`AppDelegate.setupFirebase(self=0x0000000109f08a00) at AppDelegate.swift:272:21
    frame #20: 0x00000001022cb454 Field Service`AppDelegate.init() at AppDelegate.swift:42:9
    frame #21: 0x00000001022cb5e4 Field Service`@objc AppDelegate.init() at <compiler-generated>:0
    frame #22: 0x0000000199bda698 UIKitCore`UIApplicationMain + 1728
    frame #23: 0x00000001022d1af4 Field Service`main at AppDelegate.swift:21:7
    frame #24: 0x0000000195974360 libdyld.dylib`start + 4

Been现在已经坚持了几个小时。谁能帮我吗?

Been stuck on this for hours now. Can anyone please help me out

推荐答案

Firebase团队成员在这里。大多数遇到此错误的人不小心将Firebase的两个副本链接到了他们的应用程序中,通常一个在应用程序目标中,一个在动态框架依赖关系目标中。您可以通过检查运行时日志中是否存在重复的类定义警告,来检查是否有两个Firebase副本链接到您的应用程序。如果看到类似

Firebase team member here. Most people who are running into this error have accidentally linked two copies of Firebase into their application, usually one in the app target and one in a dynamic framework dependency target. You can check if you have two copies of Firebase linked into your app by checking your runtime logs for duplicate class definition warnings. If you see warnings like

objc[40943]: Class FIRApp is implemented in both
~/Library/Developer/Xcode/DerivedData/FrameworkTest-apqjxlyrxvkbhhafhaypsbdquref/Build/Products/Debug-iphonesimulator/DynamicFramework.framework/DynamicFramework
(0x10b2a87f8) and
~/Library/Developer/CoreSimulator/Devices/4821F959-24A6-4D78-A102-4C5703103D99/data/Containers/Bundle/Application/F017D210-113A-4DAF-9E17-BDE455E71E06/FrameworkTest.app/FrameworkTest
(0x10ad2d348). One of the two will be used. Which one is undefined.

这意味着您的应用运行时中有两个Firebase副本。以前,这不会使您的应用程序崩溃,但可能导致其他未定义的行为,例如丢弃的Google Analytics(分析)事件。我们最近在FirebaseInstallations中进行了更改,导致此更改在启动时崩溃。如果您降级Firebase版本依赖性,即使您的应用在启动时不会崩溃,您仍然会有不确定的行为。

then that means you have two copies of Firebase in your app runtime. Previously this would not crash your app, but could lead to other undefined behavior like dropped Analytics events. We recently made a change in FirebaseInstallations that caused this to crash at launch. If you downgrade your Firebase version dependency, you will still have undefined behavior even if your app does not crash at launch.

不幸的是,您要么不得不放弃动态程序,要么框架方法并将所有依赖项直接链接到您的应用程序中,否则您必须将动态框架更改为静态框架。将来,我们将探索将Firebase作为动态依赖项进行分发,以便用户可以将其链接到动态框架中,而不必担心在运行时复制类定义。

Unfortunately, you'll either have to abandon the dynamic framework approach and link all dependencies directly into your app or you'll have to change your dynamic framework into a static one. In the future, we'll explore distributing Firebase as a dynamic dependency so that users can link it into dynamic frameworks without worry of duplicating class definitions at runtime.

请参见此文档在Firebase iOS SDK GitHub上

这篇关于必须先配置默认FirebaseApp实例,然后才能初始化defaultFirebaseApp实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆