// What the app tells the complication through the App Group's defaults: whether it is in demo mode, // and the last summary it saw, which the complication shows when it cannot reach the gateway. import Foundation enum SharedState { private static var defaults: UserDefaults { UserDefaults(suiteName: DeviceStore.appGroup) ?? .standard } private static let demoKey = "demo" private static let summaryKey = "summary" /// True while the app is in demo mode, so the complication shows the demo counts too. static var demo: Bool { get { defaults.bool(forKey: demoKey) } set { defaults.set(newValue, forKey: demoKey) } } /// The last summary the app or the complication saw, or nil after signing out. static var lastSummary: Summary? { get { defaults.data(forKey: summaryKey).flatMap { try? JSON.decoder().decode(Summary.self, from: $0) } } set { defaults.set(newValue.flatMap { try? JSON.encoder().encode($0) }, forKey: summaryKey) } } }