Summary: - Sources: Services - Added symbols: actor EncryptionHelper, actor FileStorageHelper, actor KeychainHelper, func registerKeyMaterialProvider, actor SyncHelper, actor UserDefaultsHelper - Removed symbols: actor EncryptionHelper, actor FileStorageHelper, actor KeychainHelper, actor SyncHelper, actor UserDefaultsHelper Stats: - 6 files changed, 15 insertions(+), 5 deletions(-)
79 lines
2.8 KiB
Swift
79 lines
2.8 KiB
Swift
import Foundation
|
|
|
|
/// Actor that handles all UserDefaults operations.
|
|
/// Provides thread-safe access to UserDefaults with suite support.
|
|
actor UserDefaultsHelper {
|
|
|
|
public static let shared = UserDefaultsHelper()
|
|
|
|
private init() {}
|
|
|
|
// MARK: - Public Interface
|
|
|
|
/// Stores data in UserDefaults.
|
|
/// - Parameters:
|
|
/// - data: The data to store.
|
|
/// - key: The key to store the data under.
|
|
/// - suite: Optional suite name. Nil uses standard UserDefaults.
|
|
/// - Throws: `StorageError.invalidUserDefaultsSuite` if suite is invalid.
|
|
public func set(_ data: Data, forKey key: String, suite: String?) throws {
|
|
let defaults = try userDefaults(for: suite)
|
|
defaults.set(data, forKey: key)
|
|
}
|
|
|
|
/// Retrieves data from UserDefaults.
|
|
/// - Parameters:
|
|
/// - key: The key to retrieve.
|
|
/// - suite: Optional suite name.
|
|
/// - Returns: The stored data, or nil if not found.
|
|
/// - Throws: `StorageError.invalidUserDefaultsSuite` if suite is invalid.
|
|
public func get(forKey key: String, suite: String?) throws -> Data? {
|
|
let defaults = try userDefaults(for: suite)
|
|
return defaults.data(forKey: key)
|
|
}
|
|
|
|
/// Removes data from UserDefaults.
|
|
/// - Parameters:
|
|
/// - key: The key to remove.
|
|
/// - suite: Optional suite name.
|
|
/// - Throws: `StorageError.invalidUserDefaultsSuite` if suite is invalid.
|
|
public func remove(forKey key: String, suite: String?) throws {
|
|
let defaults = try userDefaults(for: suite)
|
|
defaults.removeObject(forKey: key)
|
|
}
|
|
|
|
/// Checks if a key exists in UserDefaults.
|
|
/// - Parameters:
|
|
/// - key: The key to check.
|
|
/// - suite: Optional suite name.
|
|
/// - Returns: True if the key exists.
|
|
/// - Throws: `StorageError.invalidUserDefaultsSuite` if suite is invalid.
|
|
public func exists(forKey key: String, suite: String?) throws -> Bool {
|
|
let defaults = try userDefaults(for: suite)
|
|
return defaults.object(forKey: key) != nil
|
|
}
|
|
|
|
/// Gets all keys in UserDefaults for a given suite.
|
|
/// - Parameter suite: Optional suite name.
|
|
/// - Returns: An array of all keys.
|
|
/// - Throws: `StorageError.invalidUserDefaultsSuite` if suite is invalid.
|
|
public func allKeys(suite: String?) throws -> [String] {
|
|
let defaults = try userDefaults(for: suite)
|
|
return Array(defaults.dictionaryRepresentation().keys)
|
|
}
|
|
|
|
// MARK: - Private Helpers
|
|
|
|
private func userDefaults(for suite: String?) throws -> UserDefaults {
|
|
guard let suite else {
|
|
return .standard
|
|
}
|
|
|
|
guard let defaults = UserDefaults(suiteName: suite) else {
|
|
throw StorageError.invalidUserDefaultsSuite(suite)
|
|
}
|
|
|
|
return defaults
|
|
}
|
|
}
|