70 lines
2.5 KiB
Swift
70 lines
2.5 KiB
Swift
import Foundation
|
|
import LocalData
|
|
|
|
struct SampleLocationData: Codable, Sendable {
|
|
let lat: Double
|
|
let lon: Double
|
|
}
|
|
|
|
extension StorageKeys {
|
|
struct AppVersionKey: StorageKey {
|
|
typealias Value = String
|
|
|
|
let name: String = "last_app_version"
|
|
let domain: StorageDomain = .userDefaults(suite: nil)
|
|
let security: SecurityPolicy = .none
|
|
let serializer: Serializer<String> = .json
|
|
let owner: String = "SampleApp"
|
|
let availability: PlatformAvailability = .all
|
|
let syncPolicy: SyncPolicy = .automaticSmall
|
|
}
|
|
|
|
struct LastLocationKey: StorageKey {
|
|
typealias Value = SampleLocationData
|
|
|
|
let name: String = "last_known_location"
|
|
let domain: StorageDomain = .keychain(service: "com.example.app.security")
|
|
let security: SecurityPolicy = .keychain(accessibility: .afterFirstUnlock, accessControl: .userPresence)
|
|
let serializer: Serializer<SampleLocationData> = .json
|
|
let owner: String = "SampleApp"
|
|
let availability: PlatformAvailability = .phoneOnly
|
|
let syncPolicy: SyncPolicy = .manual
|
|
}
|
|
|
|
struct UserProfileFileKey: StorageKey {
|
|
typealias Value = [String: AnyCodable]
|
|
|
|
let name: String = "user_profile.json"
|
|
let domain: StorageDomain = .fileSystem(directory: .documents)
|
|
let security: SecurityPolicy = .none
|
|
let serializer: Serializer<[String: AnyCodable]> = .json
|
|
let owner: String = "SampleApp"
|
|
let availability: PlatformAvailability = .phoneOnly
|
|
let syncPolicy: SyncPolicy = .never
|
|
}
|
|
|
|
struct SessionLogsKey: StorageKey {
|
|
typealias Value = [String]
|
|
|
|
let name: String = "session_logs.json"
|
|
let domain: StorageDomain = .encryptedFileSystem(directory: .caches)
|
|
let security: SecurityPolicy = .encrypted(.aes256(keyDerivation: .pbkdf2(iterations: 10_000)))
|
|
let serializer: Serializer<[String]> = .json
|
|
let owner: String = "SampleApp"
|
|
let availability: PlatformAvailability = .phoneOnly
|
|
let syncPolicy: SyncPolicy = .never
|
|
}
|
|
|
|
struct WatchVibrationKey: StorageKey {
|
|
typealias Value = Bool
|
|
|
|
let name: String = "watch_vibration_enabled"
|
|
let domain: StorageDomain = .userDefaults(suite: nil)
|
|
let security: SecurityPolicy = .none
|
|
let serializer: Serializer<Bool> = .json
|
|
let owner: String = "SampleApp"
|
|
let availability: PlatformAvailability = .watchOnly
|
|
let syncPolicy: SyncPolicy = .never
|
|
}
|
|
}
|