From d135edc8efccb9d33217d8926fb87324f094c899 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Jan 2026 12:10:12 -0600 Subject: [PATCH] Add StorageServiceIdentifiers --- .../Models/AppGroupConfiguration.swift | 5 +++- .../StorageKeys/Keychain/APITokenKey.swift | 3 ++- .../StorageKeys/Keychain/CredentialsKey.swift | 3 ++- .../Keychain/ExternalKeyMaterialKey.swift | 3 ++- .../Keychain/LastLocationKey.swift | 3 ++- .../Constants/StorageServiceIdentifiers.swift | 27 +++++++++++++++++++ 6 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 SharedPackage/Sources/SharedKit/Constants/StorageServiceIdentifiers.swift diff --git a/SecureStorgageSample/Models/AppGroupConfiguration.swift b/SecureStorgageSample/Models/AppGroupConfiguration.swift index 66fc835..4ec4ad5 100644 --- a/SecureStorgageSample/Models/AppGroupConfiguration.swift +++ b/SecureStorgageSample/Models/AppGroupConfiguration.swift @@ -1,5 +1,8 @@ import Foundation +import SharedKit enum AppGroupConfiguration { - static let identifier = "group.com.mbrucedogs.securestorage" + static var identifier: String { + StorageServiceIdentifiers.appGroupIdentifier + } } diff --git a/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift b/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift index 33d5f47..73cc2df 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift @@ -1,5 +1,6 @@ import Foundation import LocalData +import SharedKit extension StorageKeys { /// Stores API token in keychain. @@ -7,7 +8,7 @@ extension StorageKeys { typealias Value = String let name = "api_token" - let domain: StorageDomain = .keychain(service: "com.example.securestorage.api") + let domain: StorageDomain = .keychain(service: StorageServiceIdentifiers.keychainAPIToken) let security: SecurityPolicy = .keychain( accessibility: .whenUnlockedThisDeviceOnly, accessControl: nil diff --git a/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift b/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift index 77b716b..35d0d98 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift @@ -1,5 +1,6 @@ import Foundation import LocalData +import SharedKit extension StorageKeys { /// Stores user credentials securely in keychain. @@ -8,7 +9,7 @@ extension StorageKeys { typealias Value = Credential let name = "user_credentials" - let domain: StorageDomain = .keychain(service: "com.example.securestorage") + let domain: StorageDomain = .keychain(service: StorageServiceIdentifiers.keychainCredentials) let security: SecurityPolicy let serializer: Serializer = .json let owner = "SampleApp" diff --git a/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift b/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift index c434a41..d5f9955 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift @@ -1,5 +1,6 @@ import Foundation import LocalData +import SharedKit extension StorageKeys { /// Stores external key material used for encryption policies. @@ -7,7 +8,7 @@ extension StorageKeys { typealias Value = Data let name = "external_key_material" - let domain: StorageDomain = .keychain(service: "com.example.securestorage.externalkey") + let domain: StorageDomain = .keychain(service: StorageServiceIdentifiers.keychainExternalKeyMaterial) let security: SecurityPolicy = .keychain( accessibility: .afterFirstUnlock, accessControl: nil diff --git a/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift b/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift index da10674..20740b1 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift @@ -1,5 +1,6 @@ import Foundation import LocalData +import SharedKit extension StorageKeys { /// Stores sensitive location data in keychain with biometric protection. @@ -7,7 +8,7 @@ extension StorageKeys { typealias Value = SampleLocationData let name = "last_known_location" - let domain: StorageDomain = .keychain(service: "com.example.app.security") + let domain: StorageDomain = .keychain(service: StorageServiceIdentifiers.keychainLocation) let security: SecurityPolicy = .keychain( accessibility: .afterFirstUnlock, accessControl: .userPresence diff --git a/SharedPackage/Sources/SharedKit/Constants/StorageServiceIdentifiers.swift b/SharedPackage/Sources/SharedKit/Constants/StorageServiceIdentifiers.swift new file mode 100644 index 0000000..19c6d55 --- /dev/null +++ b/SharedPackage/Sources/SharedKit/Constants/StorageServiceIdentifiers.swift @@ -0,0 +1,27 @@ +import Foundation + +public enum StorageServiceIdentifiers { + public static var bundleIdentifier: String { + Bundle.main.bundleIdentifier ?? "com.example.securestorage" + } + + public static var appGroupIdentifier: String { + "group.\(bundleIdentifier)" + } + + public static var keychainCredentials: String { + bundleIdentifier + } + + public static var keychainAPIToken: String { + "\(bundleIdentifier).api" + } + + public static var keychainExternalKeyMaterial: String { + "\(bundleIdentifier).externalkey" + } + + public static var keychainLocation: String { + "\(bundleIdentifier).security" + } +}