Cloud Firestore iOS SDKをCarthageで組み込むとクラッシュするあなたへ
何も変えずにCarthageからCocoapodsに変更したら動いたのでやっぱ何かおかしい
— 無職に至りたい (@toru_furuya) August 20, 2018
コード
SDKの組み込みはCocoaPodsかCarthageかの違いだけで、あとは全て公式ドキュメントの通りに実装していきました。
Get started with Cloud Firestore | Firebase
import Firebase FirebaseApp.configure() let db = Firestore.firestore() // Add a new document with a generated ID var ref: DocumentReference? = nil ref = db.collection("users").addDocument(data: [ // Crash here!!! "first": "Ada", "last": "Lovelace", "born": 1815 ]) { err in if let err = err { print("Error adding document: \(err)") } else { print("Document added with ID: \(ref!.documentID)") } }
ところがaddDocument()
で実際にDBへ書き込みを行う時点でクラッシュが発生してしまいました。writeではなくreadだったらどうかと思い別のAPIも試しましたが同じ結果でした。エラーログにも特にヒントとなるようなログは見つけられませんでした。
原因
FireStoreのSDKはリソースバンドルを含んでいて、そのバンドルをアプリに組み込む必要があるようです。Firebase iOS SDKのgithubレポジトリのCarthage.mdにちゃんと書いてありました。ビルド設定を色々調べたりリンクするライブラリが足りないんじゃないかと悩んで1時間ほど無駄にしたのが情けない。
firebase-ios-sdk/Carthage.md at master · firebase/firebase-ios-sdk · GitHub
If you're including a Firebase component that has resources, copy its bundles into the Xcode project and make sure they're added to the
Copy Bundle Resources
Build Phase :
- For Firestore:
-./Carthage/Build/iOS/gRPC.framework/gRPCCertificates.bundle
私と同じようなズボラな方の役に立てれば幸いです。