Update SecureStorgageSample

This commit is contained in:
Matt Bruce 2026-01-14 11:20:35 -06:00
parent cde14bd387
commit 31a85b3b22
17 changed files with 32 additions and 27 deletions

View File

@ -3,26 +3,22 @@ import LocalData
import SharedKit
struct AppStorageCatalog: StorageKeyCatalog {
static var allKeys: [StorageKeyEntry] {
static var allKeys: [AnyStorageKey] {
[
StorageKeyEntry(StorageKeys.AppVersionKey()),
StorageKeyEntry(StorageKeys.UserPreferencesKey()),
StorageKeyEntry(StorageKeys.CredentialsKey()),
StorageKeyEntry(StorageKeys.LastLocationKey()),
StorageKeyEntry(StorageKeys.APITokenKey()),
StorageKeyEntry(StorageKeys.UserProfileFileKey()),
StorageKeyEntry(StorageKeys.CachedDataKey()),
StorageKeyEntry(StorageKeys.SettingsPlistKey()),
StorageKeyEntry(StorageKeys.SessionLogsKey()),
StorageKeyEntry(StorageKeys.PrivateNotesKey()),
StorageKeyEntry(StorageKeys.ExternalSessionLogsKey()),
StorageKeyEntry(StorageKeys.WatchVibrationKey()),
StorageKeyEntry(StorageKeys.SyncableSettingKey()),
StorageKeyEntry(
StorageKeys.ExternalKeyMaterialKey(keyName: "<dynamic>"),
nameRule: .prefix(StorageKeys.ExternalKeyMaterialKey.namePrefix),
notes: "Key name is dynamic per external source (prefix matched)."
)
.key(StorageKeys.AppVersionKey()),
.key(StorageKeys.UserPreferencesKey()),
.key(StorageKeys.CredentialsKey()),
.key(StorageKeys.LastLocationKey()),
.key(StorageKeys.APITokenKey()),
.key(StorageKeys.UserProfileFileKey()),
.key(StorageKeys.CachedDataKey()),
.key(StorageKeys.SettingsPlistKey()),
.key(StorageKeys.SessionLogsKey()),
.key(StorageKeys.PrivateNotesKey()),
.key(StorageKeys.ExternalSessionLogsKey()),
.key(StorageKeys.WatchVibrationKey()),
.key(StorageKeys.SyncableSettingKey()),
.key(StorageKeys.ExternalKeyMaterialKey())
]
}
}

View File

@ -9,7 +9,7 @@ struct ExternalKeyMaterialProvider: KeyMaterialProviding {
}
func keyMaterial(for keyName: String) async throws -> Data {
let key = StorageKeys.ExternalKeyMaterialKey(keyName: keyName)
let key = StorageKeys.ExternalKeyMaterialKey()
if let existing = try await StorageRouter.shared.get(key) as Data? {
return existing
}

View File

@ -13,6 +13,7 @@ extension StorageKeys {
)
let serializer: Serializer<[String]> = .json
let owner = "SampleApp"
let description = "Stores session logs encrypted with external key material."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never
}

View File

@ -13,6 +13,7 @@ extension StorageKeys {
)
let serializer: Serializer<String> = .json
let owner = "SampleApp"
let description = "Stores private notes encrypted at rest."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never
}

View File

@ -12,6 +12,7 @@ extension StorageKeys {
let security: SecurityPolicy
let serializer: Serializer<[String]> = .json
let owner = "SampleApp"
let description = "Stores session logs encrypted with PBKDF2-derived keys."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never

View File

@ -11,6 +11,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<Data> = .data
let owner = "SampleApp"
let description = "Stores cached binary data that can be regenerated."
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
}

View File

@ -22,6 +22,7 @@ extension StorageKeys {
}
)
let owner = "SampleApp"
let description = "Stores custom-encoded string data (Base64 example)."
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
}

View File

@ -11,6 +11,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<[String: AnyCodable]> = .plist
let owner = "SampleApp"
let description = "Stores app settings exported as a property list."
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
}

View File

@ -12,6 +12,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<UserProfile> = .json
let owner = "SampleApp"
let description = "Stores a lightweight user profile for file storage and watch sync."
let availability: PlatformAvailability = .phoneWithWatchSync
let syncPolicy: SyncPolicy = .automaticSmall

View File

@ -14,6 +14,7 @@ extension StorageKeys {
)
let serializer: Serializer<String> = .json
let owner = "SampleApp"
let description = "Stores API auth token for network requests."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never
}

View File

@ -12,6 +12,7 @@ extension StorageKeys {
let security: SecurityPolicy
let serializer: Serializer<Credential> = .json
let owner = "SampleApp"
let description = "Stores user credentials for sign-in flows."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never

View File

@ -6,7 +6,7 @@ extension StorageKeys {
struct ExternalKeyMaterialKey: StorageKey {
typealias Value = Data
let name: String
let name = "external_key_material"
let domain: StorageDomain = .keychain(service: "com.example.securestorage.externalkey")
let security: SecurityPolicy = .keychain(
accessibility: .afterFirstUnlock,
@ -14,13 +14,8 @@ extension StorageKeys {
)
let serializer: Serializer<Data> = .data
let owner = "SampleApp"
let description = "Stores external key material used by encryption policies."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never
static let namePrefix = "externalkey."
init(keyName: String) {
self.name = Self.namePrefix + keyName
}
}
}

View File

@ -14,6 +14,7 @@ extension StorageKeys {
)
let serializer: Serializer<SampleLocationData> = .json
let owner = "SampleApp"
let description = "Stores last known location for location-aware features."
let availability: PlatformAvailability = .phoneOnly
let syncPolicy: SyncPolicy = .never
}

View File

@ -12,6 +12,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<String> = .json
let owner = "SampleApp"
let description = "Stores a setting that can be synced to watch."
let availability: PlatformAvailability
let syncPolicy: SyncPolicy

View File

@ -12,6 +12,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<Bool> = .json
let owner = "SampleApp"
let description = "Controls haptic feedback on watch-only experiences."
let availability: PlatformAvailability = .watchOnly
let syncPolicy: SyncPolicy = .never
}

View File

@ -14,6 +14,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<String> = .json
let owner = "SampleApp"
let description = "Tracks the last app version for migration and UI messaging."
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .automaticSmall
}

View File

@ -14,6 +14,7 @@ extension StorageKeys {
let security: SecurityPolicy = .none
let serializer: Serializer<[String: AnyCodable]> = .json
let owner = "SampleApp"
let description = "Stores user preferences for app configuration screens."
let availability: PlatformAvailability = .all
let syncPolicy: SyncPolicy = .never
}