7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FirebaseでFirebaseApp.configure()の位置で躓いた時

Posted at

#はじめに
storyboadを使わずに全てコードで実装しようとしたさい、FirebaseApp.configure()の位置で躓いたのでメモ

##原因
FirebaseApp.configure()を呼ぶところを遷移先のViewControllerのインスタンスを作った後に実行してしまっていた

##エラー内容

reason: 'The default FIRApp instance must be configured before the default 
FIRAuthinstance 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).'

AppDelegate.swiftの内容

class AppDelegate: UIResponder, UIApplicationDelegate {
    //アプリのインターフェースの背景
    //windowはイベントを制御し、アプリを制御する基本となるたくさんのタスクを実行する
    var window: UIWindow?

    // 起動した直後に走る関数
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //ストーリーボードを使わない場合は、このwindowを自分で作る必要がある。
        self.window = UIWindow(frame: UIScreen.main.bounds)
        //アプリが起動した時に一番最初に表示されたいViewControllerのインスタンスをつくる
        let initialViewController = LoginViewController()
        
        //アプリが立ち上がって一番最初に表示される画面をrootViewControllerという
        //windowのプロパティであるrootViewControllerに、表示させたいUIViewControllerを設定する
        self.window?.rootViewController = initialViewController
        
        //現在のウィンドウを表示し、それを同じレベルまたはそれ以下の他のすべてのウィンドウの前に置く便利な関数。
        self.window?.makeKeyAndVisible()
        
        // Firebaseを使うのに必要(チュートリアルで入れるように言われる)
        FirebaseApp.configure()
        
        return true
    }

LoginViewController.swiftの内容

viewDidLoad()内でAuth.auth().currentUserの関数を入れていたが、インスタンスが作られた時点で通り抜けないと思い込んでいた。
しかしAppDelegatelet initialViewController = LoginViewController()LoginViewController内のviewDidLoad()Auth.auth().currentUserFirebaseApp.configure()となっていて
Auth.auth().currentUserの関数を呼ぶ前にFirebaseApp.configure()を呼んでねというエラーがでていた

import UIKit
import SnapKit
import FirebaseAuth

class LoginViewController: UIViewController, UITextFieldDelegate {

 override func viewDidLoad() {
        super.viewDidLoad()
        //FIRAuthは→Authにする
        
        if Auth.auth().currentUser != nil {
            self.signIn()
        } else {
            
        }

#解決策

AppDelegate.swift

FirebaseApp.configure()を次の遷移先のViewControllerを呼ぶ前に呼んでおく

import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    //アプリのインターフェースの背景
    //windowはイベントを制御し、アプリを制御する基本となるたくさんのタスクを実行する
    var window: UIWindow?

    // 起動した直後に走る関数
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Firebaseを使うのに必要(チュートリアルで入れるように言われる)
        FirebaseApp.configure()
        //ストーリーボードを使わない場合は、このwindowを自分で作る必要がある。
        self.window = UIWindow(frame: UIScreen.main.bounds)
        //アプリが起動した時に一番最初に表示されたいViewControllerのインスタンスをつくる
        let initialViewController = LoginViewController()
        
        //アプリが立ち上がって一番最初に表示される画面をrootViewControllerという
        //windowのプロパティであるrootViewControllerに、表示させたいUIViewControllerを設定する
        self.window?.rootViewController = initialViewController
        
        //現在のウィンドウを表示し、それを同じレベルまたはそれ以下の他のすべてのウィンドウの前に置く便利な関数。
        self.window?.makeKeyAndVisible()
    
        return true
    }
}

参考文献

FirebaseのDatabaseで詰まったとこ

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?