Update SecureStorageSample

This commit is contained in:
Matt Bruce 2026-01-14 13:51:19 -06:00
parent 3317915dff
commit f1f25c4b78
2 changed files with 20 additions and 3 deletions

View File

@ -90,9 +90,9 @@ The app demonstrates various storage configurations:
- 6 access control options (biometry, passcode, etc.)
### File System
- Documents directory (persisted, backed up)
- Caches directory (can be purged)
- JSON and PropertyList serializers
- **Documents**: Permanent storage, backed up to iCloud. Use for critical user data.
- **Caches**: Purgeable storage (iOS may delete when low on space), not backed up. Use for temporary data.
- JSON and PropertyList serializers supported.
### App Group Storage
- Shared UserDefaults via App Group identifier
@ -117,6 +117,8 @@ The app demonstrates how to configure the `LocalData` library globally during st
- **Encryption**: Customized Keychain service (`SecureStorageSample`) and account (`AppMasterKey`) names to isolate the library's master encryption key from other apps.
- **Sync**: Set a custom `maxAutoSyncSize` of 50KB to control which data is automatically synchronized to the Apple Watch, overriding the library's 100KB default.
- **File Storage**: Scoping all library files into a `SecureStorage` sub-directory. This ensures that the library's data (whether in the main sandbox or a shared App Group container) is kept neat and isolated within its own folder, rather than cluttering the root directories.
- **Storage Defaults**: Pre-configuring the default Keychain service and App Group identifier. This allows common keys in the app to omit these identifiers, reducing boilerplate and making the code more maintainable.
This approach centralizes infrastructure settings and avoids hardcoding environment-specific values within individual storage keys.

View File

@ -28,6 +28,21 @@ struct SecureStorageSampleApp: App {
let syncConfig = SyncConfiguration(maxAutoSyncSize: 50_000)
await StorageRouter.shared.updateSyncConfiguration(syncConfig)
// 3. Global File Storage Configuration
// We scope all our library files into a "SecureStorage" sub-directory
// underneath the standard Documents/Caches folders.
let fileConfig = FileStorageConfiguration(subDirectory: "SecureStorage")
await StorageRouter.shared.updateFileStorageConfiguration(fileConfig)
// 4. Global Storage Defaults
// Setting default identifiers for Keychain and App Groups.
// This allows keys to be defined more concisely without repeating these IDs.
let storageConfig = StorageConfiguration(
defaultKeychainService: StorageServiceIdentifiers.bundleIdentifier,
defaultAppGroupIdentifier: StorageServiceIdentifiers.appGroupIdentifier
)
await StorageRouter.shared.updateStorageConfiguration(storageConfig)
do {
try await StorageRouter.shared.registerCatalog(AppStorageCatalog.self)
} catch {