Не удалось получить экземпляр FirebaseApp после перехода на SwiftUI lifecycle

#firebase #google-cloud-firestore #swiftui

# #firebase #google-cloud-firestore #swiftui

Вопрос:

У меня есть приложение SwiftUI с UIKit AppDelegate и SceneDelegate. Это приложение использует хранилище Firestore и Firebase, и все работало нормально.

Затем я решил перейти на SwiftUI lifecycle вместо UIKit AppDelegate и SceneDelegate. Но теперь приложение вылетает при запуске.

Это ошибка в консоли

 2020-12-29 22:06:24.737199 0530 App Name[15411:5408005] *** Terminating app due to uncaught exception 'FIRIllegalStateException', reason: 'Failed to get FirebaseApp instance. Please call FirebaseApp.configure() before using Firestore'
*** First throw call stack:
(0x193bcd9d8 0x1a7f36b54 0x104c9d4f4 0x104c9c9dc 0x104d7548c 0x104d75364 0x1045cf314 0x1045cf1f8 0x104570704 0x104570a24 0x19a18cd08 0x104570980 0x104570a38 0x193825568)
libc  abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'FIRIllegalStateException', reason: 'Failed to get FirebaseApp instance. Please call FirebaseApp.configure() before using Firestore'
terminating with uncaught exception of type NSException
(lldb) 
 

Я пробовал оба варианта

 import Firebase
import SwiftUI

@main
struct AppName: App {

    init() {
        FirebaseApp.configure()
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
 

и этот метод

 import Firebase
import SwiftUI

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        return true
    }
}

@main
struct AppName: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
 

но он все еще сбой (та же ошибка).

Затем я обновил все модули и даже повторно загрузил и заменил GoogleService-Info.plist файл. Но результат тот же.

Я понятия не имею, что здесь не так. Это приложение по-прежнему отлично работает с UIKit AppDelegate и SceneDelegate.
Пожалуйста, помогите мне. Спасибо.

Комментарии:

1. Без дополнительного контекста трудно сказать, в чем именно проблема, но сообщение об ошибке, которое вы видите, означает, что какая-то часть вашего приложения начинает использовать Firebase до выполнения FirebaseApp.configure() . Если вы используете внедрение зависимостей, проверьте настройки DI. Также может быть полезно просмотреть ваш стек вызовов при сбое приложения, чтобы узнать, кто звонит.

2. Большое спасибо за комментарий @PeterFriese. Я использую некоторые модели представления в качестве объектов среды, и приложение выходит из строя из let db = Firestore.firestore() -за этих моделей представления. Поэтому я let db = Firestore.firestore() вставил функции моделей представления вместо обычных let db = Firestore.firestore() внешних функций, и теперь приложение работает нормально.

3. Потрясающе — приятно слышать, что вы нашли решение! Возможно, было бы полезно опубликовать это как ответ на ваш собственный вопрос, чтобы другие, столкнувшиеся с той же проблемой, могли легче найти ваше решение.