FirebaseのNoSQLであるFirestoreはiOS上で利用する場合、基本的に NSDictionary
型でやり取りしていました。
例としては
// Documentの追加
let data = ["key": "value"]
let ref = Firestore.firestore().collection("hoge").addDocument(data: data) { error in
if error == nil {
let documentID = ref.documentID
// something todo
}
}
// Documentの取得
let documentID = ...
Firestore.firestore().collection("hoge").document(documentID).getDocuments { (snapshot, error) in
guard let data = snapshot?.data() else { return }
let value = data["key"]
// something todo
}
こんな感じだったかと思います。
Codable
Swiftには4からCodable
という機能が導入されました。
FirestoreがJSON形式のData
型でやり取りしてくれたらCodable
が利用出来るのになと何度考えた事か...
そこでalickbass/CodableFirebaseというライブラリを利用していた方も多かったのでは?
そんな中、公式の方法でCodableが利用出来る様になっていました。
お?もしかしてFirestoreにCodable公式サポート入った? | Firestore swift Codable support by Hui-Wu · Pull Request #3198 · firebase/firebase-ios-sdk https://t.co/ft1reNeOaN
— かっくん@iOSDCでDark mode (@fromkk) June 19, 2019
まだ、公式のCocoaPodsには登録されて無い様なので、利用する方法としては@yimajoさんのTweetを参考するのが良さそうです。
FirestoreをSwiftで使う時、データの型をマッピングするのは標準の'FirebaseFirestoreSwift'で良いんすよ。cocoapodsには登録されていないから`pod 'FirebaseFirestoreSwift', :git => 'https://t.co/3qHwF2ploK', :branch => 'master'`ってやればいい
— y.imajô (@yimajo) June 30, 2019
Podfileに
pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'FirebaseFirestoreSwift', '~> 0.2'
としてpod install
でインストールが完了です。
2019/10/25追記
コメントにてGitの指定が必要なくなった旨を共有頂いたので編集しました。
2019/10/25追記終わり
使い方
使い方は
import FirebaseFirestoreSwift
を記述して、エンコーダーはlet encoder = Firestore.Encoder()
、デコーダーはlet decoder = Firestore.Decoder()
を利用します。
後はJSONEncoder/Decoder
などと同様に利用する事が可能です。
alickbass/CodableFirebaseを利用していた方は
- import CodableFirebase
+ import FirebaseFirestoreSwift
- let decoder = FirestoreDecoder()
+ let decoder = Firestore.Decoder()
- let encoder = FirestoreEncoder()
+ let encoder = Firestore.Encoder()
の修正だけで良いので移行が簡単に可能です。
まとめ
個人的には利用する外部ライブラリが多いと依存が増えたり、アプリのサイズや起動時間に影響が出るのでなるべく控え、それでも利用しないといけない場合は、ある程度メンテが活発で公式にサポートがある物を選びたいなと思っていました。
今回は公式でサポートが増えたのがとても良いなと思いました。
また、これまで出来ないと思っていた事が出来る様になるのも嬉しいですね。