Экземпляр FirebaseApp по умолчанию должен быть настроен до инициализации экземпляра defaultFirebaseApp. - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь настроить Firebase, используя FirebaseApp.configure(), но обращаюсь к следующему cra sh:

 *** 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() из didFinishLaunchingWithOptions и из init из AppDelegate также:

override init() {
        super.init()

        // Setting up the firebase instance
        setupFirebase()
    }

private func setupFirebase() {

        FirebaseApp.configure()

        Messaging.messaging().delegate = self    
    }

В этот момент происходит сбой - Screenshot 2020-03-18 at 8 10 39 PM

Я использую import FirebaseCore & import FirebaseMessaging внутри моего 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)

Вот как выглядит трассировка стека:

 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

Застрял на этом уже несколько часов. Может кто-нибудь, пожалуйста, помогите мне

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Член команды Firebase здесь. Большинство людей, сталкивающихся с этой ошибкой, случайно связали две копии Firebase в свое приложение, обычно одну в целевом приложении и одну в динамической целевой структуре c framework. Вы можете проверить, есть ли у вас две копии Firebase, связанные с вашим приложением, проверив журналы времени выполнения на наличие дублирующих предупреждений определения класса. Если вы видите предупреждения типа

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 во время выполнения вашего приложения. Ранее это не могло взломать sh ваше приложение, но могло привести к другому неопределенному поведению, например, к удаленным событиям Analytics. Недавно мы внесли изменения в FirebaseInstallations, которые привели к тому, что при запуске это привело к sh. Если вы понизите свою зависимость от версии Firebase, у вас все равно будет неопределенное поведение, даже если ваше приложение не запускает sh при запуске.

К сожалению, вам придется либо отказаться от динамического подхода c framework и свяжите все зависимости непосредственно в ваше приложение, иначе вам придется изменить динамический c фреймворк на обычный c. В будущем мы рассмотрим распространение Firebase в виде динамической c зависимости, чтобы пользователи могли связать его с динамическими c инфраструктурами, не беспокоясь о дублировании определений классов во время выполнения.

См. это можно сделать c на Firebase iOS SDK GitHub для более подробной информации.

0 голосов
/ 19 марта 2020

Вам не нужно инициализировать его. В соответствии с Firebase сделайте c , проверьте здесь

Требуется установка, добавьте GoogleService-Info.plist файл и FirebaseApp.configure() в didFinishLaunchingWithOptions и все.

также, проверить это решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...