Изучите 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 и т. Д., Вы можете встретиться со мной один на один здесь.