SwiftUI集成Firebase Auth模拟器报错:需先配置FirebaseApp实例
解决SwiftUI项目连接Firebase Auth模拟器时的初始化错误
问题概述
编译SwiftUI项目连接Firebase Auth模拟器时,点击注册按钮出现错误:
The default FirebaseApp instance must be configured before the default Auth instance can be initialized. One way to ensure this is to call
FirebaseApp.configure()in the App Delegate'sapplication(_:didFinishLaunchingWithOptions:)(or the@mainstruct's initializer in SwiftUI)
Firestore和Storage模拟器运行正常,但Auth模块报错,重启实例无法解决。
解决方案
问题根源在于Auth模拟器的配置时机错误,以及Auth实例初始化顺序冲突。以下是具体修复步骤:
1. 迁移Auth模拟器配置到App启动阶段
在AppDelegate中,将Auth模拟器的配置与Firestore配置放在一起,确保在任何Auth操作前完成初始化:
class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { // 先初始化Firebase核心实例 FirebaseApp.configure() // 配置Firestore模拟器 let settings = Firestore.firestore().settings #if targetEnvironment(simulator) settings.host = "localhost:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings // 配置Auth模拟器,放在FirebaseApp配置之后 Auth.auth().useEmulator(withHost: "127.0.0.1", port: 9099) #endif return true } }
2. 移除LoginView中重复的模拟器配置
删除register()方法中重复的模拟器设置代码,避免重复初始化导致的冲突:
func register(){ Auth.auth().createUser(withEmail: email, password: password){ result, error in if error != nil{ print(error!.localizedDescription) } } }
3. 额外校验项
- 确认
GoogleService-Info.plist已正确添加到项目主Target,且未重复添加 - 确保Auth模拟器端口
9099与本地启动的Firebase Auth模拟器端口一致
修复原理
原代码在register()方法中才配置Auth模拟器,此时Auth实例可能已被隐式初始化,导致FirebaseApp配置与Auth实例初始化顺序冲突。将模拟器配置提前到App启动阶段,保证Auth实例在创建时就绑定模拟器配置,彻底解决初始化顺序问题。
内容的提问来源于stack exchange,提问作者Arjun Patel
相关产品推荐
相关产品推荐

