Firebase默认应用已配置崩溃问题求助:现有方案无效
解决Firebase "Default app has already been configured." 崩溃问题
我太懂这种明明加了判断还崩溃的憋屈了——这个Firebase初始化的坑我也踩过好几次,咱们一步步来排查:
核心原因分析
你加的[FIRApp defaultApp] == nil判断逻辑没问题,但崩溃说明在你这段代码执行之前,Firebase已经被初始化了,常见的触发点有这几个:
- Firebase SDK自动初始化:如果你已经把
GoogleService-Info.plist加到项目里,iOS 9+版本的Firebase会自动读取配置并初始化默认应用,根本不需要手动调用[FIRApp configure] - 第三方SDK偷偷初始化:比如某些广告、统计、推送SDK内部集成了Firebase,它们的初始化代码会先于你的
didFinishLaunching调用Firebase配置 - 项目隐藏调用:比如分类的
+load方法、某个ViewController的初始化代码里,不小心重复调用了[FIRApp configure]
具体解决步骤
步骤1:先尝试移除手动初始化代码
如果你的项目里已经正确添加了GoogleService-Info.plist,直接删掉手动的[FIRApp configure]调用(包括那个判断)试试!很多时候就是自动初始化和手动初始化冲突了,删掉之后崩溃大概率会消失。
步骤2:必须手动控制初始化?关闭自动初始化
如果业务逻辑要求必须在特定时机初始化Firebase,那需要先禁用自动初始化:
- 打开项目的
Info.plist,添加一个布尔类型键:FirebaseAppDelegateProxyEnabled,把它的值设为NO - 之后保留你原来的判断代码,确保只初始化一次:
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { if ([FIRApp defaultApp] == nil) { [FIRApp configure]; } self.viewController = [[MainViewController alloc] init]; return [super application:application didFinishLaunchingWithOptions:launchOptions]; }
步骤3:排查第三方SDK或隐藏的初始化调用
如果上面两步都没用,那得找找是谁提前初始化了Firebase:
- 全局搜索项目里的
[FIRApp configure],看看是不是在其他文件里还有调用,尤其是第三方库的代码或者你自己写的分类 - 查看你集成的第三方SDK文档,比如某些广告SDK会默认集成Firebase Analytics,看看有没有关闭自动初始化的开关
- 加日志调试:在
didFinishLaunching最开头打印所有已初始化的Firebase应用,辅助定位:
NSLog(@"已初始化的Firebase应用:%@", [FIRApp allApps]);
- 用Xcode符号断点定位:添加一个符号断点,输入
FIRAppConfigure,当这个方法被调用时,查看调用栈就能知道是谁触发的初始化
内容的提问来源于stack exchange,提问作者user4422315
相关产品推荐
相关产品推荐

