0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SwiftUI + Firebase使用時にPreviewが使えない悪魔的な罠

Last updated at Posted at 2025-03-23

環境

Xcode: 16.2
Swift: 6.0
Firebase: 11.9.0

問題

レイアウトファイルを開いても下記のようにロードが終わらない。
時折、「クラッシュしました」のような旨のメッセージが表示されたりもする。
(下記はCanvasウィンドウの画像)

スクリーンショット 2025-03-23 13.14.12.png

原因

GoogleService-Info.plist(以降plistファイルと表記)が正しく配置されていない場合に起こり得る。
Firebaseを導入する際に、AppDelegateクラスにて下記のような記述を追記している。

FirebaseApp.configure()

プレビュー時に上記処理が実行されるため、plistファイルが配置されていないことで正しく実行されない。

通常、Firebaseを使用しているにも関わらず、plistファイルを配置しないことは考えられない。
しかし、下記のような場合に直面しやすい。そして、プレビューとplistファイルの直接的な関係が見えにくいため気が付きにくい。
・GitHubへplistファイルをプッシュしていない(運用方針としては正しいです)
・clone直後、plistを配置する前に簡単にプレビュー内で画面のレイアウト感とかを確かめたい

解決策

ケース1. plistファイルをリモートへプッシュ

無論、plistファイルのプッシュは非推奨です。
しかし、GitHubのプライベートリポジトリやGitLabなど無関係の第三者がアクセスできない環境であれば検討する余地はあります。

ケース2. プレビュー時のみ処理を分岐

下記のように変更することで、プレビュー時のみFirebase初期化を回避することができます。

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

ケース3. clone直後にplistファイルを配置する

こちらは通常通りに配置するだけですので割愛します。

まとめ

解決に苦労しました....
特に、私の場合はiOS開発は初心者のため、プレビューの流れなどは全く意識していませんでした。
そのため、プレビューとplistファイルの間接的な関係性は全く想定出来ていませんでした。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?