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 = .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 = .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 = .json let owner: String = "SampleApp" let availability: PlatformAvailability = .watchOnly let syncPolicy: SyncPolicy = .never } }