SecureStorageSample/SecureStorgageSample/StorageKeys.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
}
}