#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. Потрясающе — приятно слышать, что вы нашли решение! Возможно, было бы полезно опубликовать это как ответ на ваш собственный вопрос, чтобы другие, столкнувшиеся с той же проблемой, могли легче найти ваше решение.