Skip to content

Instantly share code, notes, and snippets.

@liamnichols
Last active May 30, 2017 23:09
Show Gist options
  • Save liamnichols/4f1122cef22d3ddafc8d0b87f034914c to your computer and use it in GitHub Desktop.
Save liamnichols/4f1122cef22d3ddafc8d0b87f034914c to your computer and use it in GitHub Desktop.
import Foundation
import FirebaseRemoteConfig
final class Config {
/// The shared instance of config to use
static let shared: Config = Config()
/// The maximum number of items that are allowed in this mystery app
internal let maxItemCount: Int
/// The initalizer is private as intended use is via the shared static property.
private init() {
// 1. Configure for dev mode if we need it, otherwise a 1 hour expiration duration
let remoteConfig = FIRRemoteConfig.remoteConfig()
#if DEBUG
let expirationDuration: TimeInterval = 0
remoteConfig.configSettings = FIRRemoteConfigSettings(developerModeEnabled: true)!
#else
let expirationDuration: TimeInterval = 3600
#endif
// 2. Set our default values and keys
remoteConfig.setDefaults([
"maximum_item_count": 42 as NSNumber
])
// 3. Activate any fetched values before we read anything back
remoteConfig.activateFetched()
// 4. Now set the properties on config based on what we have currently
self.maxItemCount = remoteConfig["maximum_item_count"].numberValue!.intValue
// 5. Perform the next fetch so that it's ready when we re-launch
remoteConfig.fetch(withExpirationDuration: expirationDuration) { status, _ in
print("[Config] Fetch completed with status:", status, "(\(status.rawValue))")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment