2025年6月9日

SwiftUI + Firebase使用時プレビューが使えないことがある現象について


Content
こんにちは、はるです。

最近、iOS開発をしていて本件の沼にハマってしまい週末を全て溶かしてしまいました...。
今回は、SwiftUI + Firebaseを使用しているときにプレビューが使えなくなる現象について原因と対処法を紹介しようと思います。
また、本記事はiOS開発にてFirebaseを使用したことがある人を対象としていますので"Firebaseとはなにか?"といった説明は省略させていただきます。

症状

SwiftUIを用いて開発したレイアウトファイルを開いてもプレビューが表示されません。
下記画像のようにクラッシュした旨の内容が表示されることもあります。

原因

下記の条件が揃っている場合に発生します。
GoogleService-Info.plistを配置していない
・AppDelegateクラスにてプレビュービルド時でも「FirebaseApp.configure()」が実行される

原因はプレビュー生成時の裏で走るビルドにあります。(厳密には普段のビルドとは異なります)
本ビルド時、Firebase SDK関連の初期化でGoogleService-Info.plistの有無をチェックするのですが、その際に当該ファイルが配置されていないと初期化処理が失敗してしまうためこれが影響していると思われます。

また、下記のイシューでも似たような症状が議論されています。
■参考情報
https://github.com/firebase/firebase-ios-sdk/issues/6574

 

対策及び回避手段

対策及び回避手段は3つあります。

1. GoogleService-Info.plistをプッシュする
プライベートリポジトリやGitLabなどであればこちらの手法も正しいと思います。

2. プレビュービルド時のみFirebase初期化を回避


#if DEBUG
if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] != "1" {
FirebaseApp.configure()
}
#else
FirebaseApp.configure()
#endif

 

上記のようにプレビュービルド時のみ回避するのも良い手だと思います。
特に、プロジェクトに新たにジョインした人が「まずはコードの雰囲気知りたいな…」という時に混乱を防ぐことが出来るメリットもありますね。

3. clone直後にしっかり配置する
これが最善手です。
私の場合は、先走って雰囲気だけ確認しようとしたことからGoogleService-Info.plistファイルの配置を後手にしてしまいました。

まとめ

前段にも記載しましたが、本来はclone直後にGoogleService-Info.plistファイルの配置を行うため遭遇することは少ないでしょう。
しかし、それ故に一度引っかかってしまうと中々解決に至りません。
特に、FirebaseとUIプレビューは直接的な関わりがないので気がつくことが非常に困難です。(エラーメッセージからも読み取れません)

私の場合、こちらと同時期にSwinjectを使用したDI導入を行なっていたためすっかりそちらに原因があるとばかり思い込んでしまいました…。

2025年6月9日 SwiftUI + Firebase使用時プレビューが使えないことがある現象について

Category モバイル

ご意見・ご相談・料金のお見積もりなど、
お気軽にお問い合わせください。

お問い合わせはこちら