Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alickbass/codablefirebase
Use Codable with Firebase
https://github.com/alickbass/codablefirebase
codable firebase-database firebase-firestore swift
Last synced: about 3 hours ago
JSON representation
Use Codable with Firebase
- Host: GitHub
- URL: https://github.com/alickbass/codablefirebase
- Owner: alickbass
- License: mit
- Created: 2017-10-21T10:30:55.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-10-06T00:44:10.000Z (about 2 years ago)
- Last Synced: 2024-05-29T21:31:27.423Z (6 months ago)
- Topics: codable, firebase-database, firebase-firestore, swift
- Language: Swift
- Size: 120 KB
- Stars: 690
- Watchers: 25
- Forks: 91
- Open Issues: 43
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CodableFirebase
Use [Codable](https://developer.apple.com/documentation/swift/codable) with [Firebase](https://firebase.google.com)[![CocoaPods](https://img.shields.io/cocoapods/p/CodableFirebase.svg)](https://github.com/alickbass/CodableFirebase)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Build Status](https://travis-ci.org/alickbass/CodableFirebase.svg?branch=master)](https://travis-ci.org/alickbass/CodableFirebase)## Overview
This library helps you to use your custom types that conform to `Codable` protocol with Firebase. Here's an example of a custom model:
```swift
struct Model: Codable {
enum MyEnum: Int, Codable {
case one, two, three
}
let stringExample: String
let booleanExample: Bool
let numberExample: Double
let dateExample: Date
let arrayExample: [String]
let optionalExample: Int?
let objectExample: [String: String]
let myEnumExample: MyEnum
}
```### Firebase Realtime Database usage
This is how you would use the library with [Firebase Realtime Database](https://firebase.google.com/products/realtime-database/):
```swift
import Firebase
import CodableFirebaselet model: Model // here you will create an instance of Model
let data = try! FirebaseEncoder().encode(model)Database.database().reference().child("model").setValue(data)
```And here is how you would read the same value from [Firebase Realtime Database](https://firebase.google.com/products/realtime-database/):
```swift
Database.database().reference().child("model").observeSingleEvent(of: .value, with: { snapshot in
guard let value = snapshot.value else { return }
do {
let model = try FirebaseDecoder().decode(Model.self, from: value)
print(model)
} catch let error {
print(error)
}
})
```### Firebase Cloud Firestore usage
This is how you would encode a model with [Firebase Cloud Firestore](https://firebase.google.com/products/firestore/):
```swift
import Firebase
import CodableFirebaselet model: Model // here you will create an instance of Model
let docData = try! FirestoreEncoder().encode(model)
Firestore.firestore().collection("data").document("one").setData(docData) { error in
if let error = error {
print("Error writing document: \(error)")
} else {
print("Document successfully written!")
}
}
```And this is how you would decode the same model with [Firebase Cloud Firestore](https://firebase.google.com/products/firestore/):
```swift
Firestore.firestore().collection("data").document("one").getDocument { document, error in
if let document = document {
let model = try! FirestoreDecoder().decode(Model.self, from: document.data())
print("Model: \(model)")
} else {
print("Document does not exist")
}
}
```#### How to use `GeoPoint`, `DocumentRefence`, `FieldValue`, `Timestamp` in Cloud Firestore
In order to use these types with Cloud Firestore, you need to add the following code somewhere in your app:
```swift
extension DocumentReference: DocumentReferenceType {}
extension GeoPoint: GeoPointType {}
extension FieldValue: FieldValueType {}
extension Timestamp: TimestampType {}
```and now they become `Codable` and can be used properly with `FirestoreEncoder` and `FirestoreDecoder`.
***PLEASE NOTE*** that as `FieldValue` is only used to [`setData()` and `updateData()`](https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/FieldValue), it only adopts the `Encodable` protocol.
## Integration
### CocoaPods (iOS 9+)
You can use CocoaPods to install CodableFirebase by adding it to your Podfile:
```swift
platform :ios, '9.0'
use_frameworks!target 'MyApp' do
pod 'CodableFirebase'
end
```Note that this requires CocoaPods version 36, and your iOS deployment target to be at least 9.0:
### Carthage (iOS 9+)
You can use Carthage to install CodableFirebase by adding it to your Cartfile:
```swift
github "alickbass/CodableFirebase"
```