はじめに
macOSアプリでもFirebaseを使いたい! と思ったことがある方は多いと思います。
しかし、SwiftUIでの開発でも、iOSと同じようにFirebaseを導入できない というトラップがあります!
今回はうまく行く方法をまとめました。
iOSのようにうまくいかない
まずはうまくいかない方法から。
iOSのようにAppDelegate
に書き込んでもうまくいきません。
@main
struct MyMacOSApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
FirebaseApp.configure()
}
}
これだとうまく動きません!
そもそもAppDelegate
がmacOSアプリだと生成されないこともあり、避けたい方法かと思われます。
コード
このように書くと動きます。
@main
struct ASKApp: App {
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
init
時に動かしてしまうわけです。
これでも、iOSと挙動がちがうことは確認できなかったので、普通の用途なら銃bんかと思います!
余談
iOSとマルチプラットフォームで開発する場合、@NSApplicationDelegateAdaptor
と@UIApplicationDelegateAdaptor
を#if os()
で切り替えて使う、という方法も使いたくなりますが、試したところうまくいきませんでした。
なので大人しく2つの@main
を扱うと良さそうです。