Изучите Firebase с SwiftUI 2.0

SwiftUI 2.0 принес нам много новых функций. Мне больше всего нравится жизненный цикл нового приложения, потому что он проще старого, но его настройка с помощью Firebase может быть сложной.

В этой статье мы узнаем, как настроить Firebase с новым жизненным циклом SwiftUI.

Во-первых, давайте посмотрим на разницу между жизненным циклом нового и старого приложения!

Примечание. Вы можете загрузить пример проекта и исходные коды этой статьи на GitHub.

Жизненный цикл делегата приложения UIKit и жизненный цикл SwiftUI

Для жизненного цикла UIKit вам нужно написать configure() функцию Firebase в didFinishLaunchingWithOptions методе. Этот метод предназначен для операций, которые должны выполняться при первом открытии приложения.

import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
       return true
    }
}

Жизненный цикл SwiftUI отличается от UIKit, потому что SwiftUI - это декларативный фреймворк. Поэтому существуют разные методы и классы. Очевидно, что методы, которые мы будем использовать в жизненном цикле SwiftUI, будут немного отличаться.

Если вы раньше использовали SwiftUI и UIKit вместе, вы знаете, что некоторые классы или методы, которые мы хотим использовать в SwiftUI, взяты из UIKit, поскольку многие вещи все еще не поддерживаются в SwiftUI. Мы получим помощь от UIKit при адаптации жизненного цикла приложения SwiftUI к Firebase.

На данный момент я не могу сказать, что между ними есть существенная разница. Возможно, что-то изменится с SwiftUI 3.0.

Начните использовать новый жизненный цикл SwiftUI

Прежде всего, нам нужно создать новый проект Xcode (для использования нового жизненного цикла SwiftUI вам понадобится Xcode 12). При создании нового проекта убедитесь, что Интерфейс - это SwiftUI, а Жизненный цикл это Приложение SwiftUI.

После создания проекта перейдите к файлу ExampleProjectApp.swift (название вашего проекта может отличаться от моего). При использовании нового жизненного цикла приложения самая ранняя возможная точка для участия в жизненном цикле - это добавление инициализатора в основную точку входа вашего приложения.

import SwiftUI
@main
struct Example_ProjectApp: App {
    var body: some Scene {
         WindowGroup {
            ContentView()
         }
    }
}

Допустим, вы настраиваете Firebase для этого проекта. Нам нужно импортировать Firebase в этот файл.

import SwiftUI
import Firebase

Ну как мы можем инициализировать Firebase? Ответ прост: метод init.

import SwiftUI
import Firebase
@main
struct Example_ProjectApp: App {
    // MARK: - Life Cycle
    init() {
        FirebaseApp.configure()
    }
  
    // MARK: - UI Elements
    var body: some Scene {
        WindowGroup {
            MainScreen()
        }
    }
}

Это хорошо работает для SDK Firebase, таких как Cloud Firestore, но этого недостаточно для Firebase Cloud Messaging, поскольку он использует переключение методов для подключения к жизненному циклу приложения. Этот механизм позволяет фреймворкам перехватывать вызовы определенных методов и обрабатывать их перед передачей вызова вашему приложению.

В этом случае вам нужно использовать оболочку свойств @UIApplicationDelegateAdaptor для подключения вашего приложения к экземпляру AppDelegate.

import SwiftUI
import Firebase
class AppDelegate: NSObject, UIApplicationDelegate {
    
    // MARK: - Methods
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }
}
@main
struct Example_ProjectApp: App {
    
    // MARK: - Properties
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
  
    // MARK: - Life Cycle
    init() {
        FirebaseApp.configure()
    }
  
    // MARK: - UI Elements
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

В то же время вы сможете постепенно перейти на новую модель жизненного цикла приложения.

Заключение

Надеюсь, вы нашли эту статью полезной. Я продолжу писать о Firebase, так что следите за обновлениями!

Если вы хотите встретиться со мной или у вас есть вопросы по разработке iOS и т. Д., Вы можете встретиться со мной один на один здесь.