Improve readme by adding examples and simplifying descriptions.
Add LocalAuthenticationClient [ Soon ]
Find out if it’s better to use Any-based UserDefaults storage instead of DataRepresentable-based.
Add more tests
Caching
IDFA
Keychain
Notifications
HapticEngine
UserDefaults
DataRepresentable
Caching
CacheClient<Key, Value> is a generic client over hashable key and value, it provides interfaces for the following operations:
saveValue(_: Value, forKey: Key)
loadValue(of: Value.Type = Value.self, forKey: Key) -> Value
removeValue(forKey: Key)
removeAllValues()
MemoryCacheClient
MemoryCacheClient is build on top of NSCache. Under the hood it uses MemoryCache wrapper, improved version of John Sundells’ Cache. You can use MemoryCache (which also provides a way to save itself to disk if your types are codable) directly to build your own CacheClient implementations.
IDFA
IDFAPermissionClient is a client for ASIdentifierManager and ATTrackingManager, it provides interfaces for the following operations:
IDFAPermissionClient.AuthorizationStatus is a wrapper for ATTrackingManager.AuthorizationStatus type and ASIdentifierManager.isAdvertisingTrackingEnabled value it’s values are:
It also has a computed property isPermissive which is true for .authorized and .unavailableWithTrackingEnabled
Keychain
KeychainClient is a client for Security framework keychain access, it stores objects as data (Using DataRepresentable protocol) and provides interfaces for the following operations:
loadValue<Value: DataRepresentable>(of: Value.Type = Value.self, forKey: Key) -> Value
removeValue(forKey: Key)
KeychainClient.Key can be initialized by rawValue: Stirng, StringLiteral or StringInterpolation. Also you can use .bundle(_:Key) or .bundle(_:Bundle, _:Key) to add bundleID prefix to your key.
KeychainClient.Operations.Save.AccessPolicy is a wrapper for kSec access constants and it’s values are:
configureRemoteNotifications(_:) // Pass .register or .unregister to the function
NotificationsPermissionsClient.AuthorizationStatus is a wrapper for UNAuthorizationStatus type it’s values are:
notDetermined
denied
authorized
provisional
ephemeral// iOS14+ only
It also has a computed property isPermissive which is true for authorized, ephimeral and provisional
NotificationsPermissionsClient.AuthorizationOptions is a wrapper for UNAuthorizationOptions type it’s predefined values are:
badge
sound
alert
carPlay
criticalAlert
providesAppNotificationSettings
provisional
announcement// iOS only
You can also construct AuthorizationOptions object by providing UInt raw value.
HapticEngine
HapticEngineClient is a factory-client for HapticFeedback clients. HapticFeedback is a client for UIFeedbackGenerator.
Usage
import HapticEngineClientLive
// If you need just one generator you can use HapticFeedback directly
HapticFeedback.success.trigger()
// Otherwise if you need more flexible way to create Haptic feedbacks use HapticEngineClient
HapticEngineClient.live.generator(for: .success).trigger()
UserDefaults
UserDefaultsClient is a client for UserDefaults object, it stores objects as data (Using DataRepresentable protocol) and provides interfaces for the following operations:
loadValue<Value: DataRepresentable>(of: Value.Type = Value.self, forKey: Key) -> Value
removeValue(forKey: Key)
UserDefaultsClient.Key can be initialized by rawValue: Stirng, StringLiteral or StringInterpolation. Also you can use .bundle(_:Key) or .bundle(_:Bundle, _:Key) to add bundleID prefix to your key.
DataRepresentable
DataRepresentable module provides a protocol for objects data representation. It is used by UserDefaultsClient and KeychainClient to store objects as data.
Installation
Basic
You can add StandardClients to an Xcode project by adding it as a package dependency.
From the File menu, select Swift Packages › Add Package Dependency…
swift-standard-clients
Client declarations and live implementations for standard iOS managers
Table of contents
Todos
Any-based UserDefaults storage instead ofDataRepresentable-based.Caching
CacheClient<Key, Value>is a generic client over hashable key and value, it provides interfaces for the following operations:saveValue(_: Value, forKey: Key)loadValue(of: Value.Type = Value.self, forKey: Key) -> ValueremoveValue(forKey: Key)removeAllValues()MemoryCacheClient
MemoryCacheClientis build on top ofNSCache. Under the hood it usesMemoryCachewrapper, improved version of John Sundells’ Cache. You can useMemoryCache(which also provides a way to save itself to disk if your types are codable) directly to build your ownCacheClientimplementations.IDFA
IDFAPermissionClientis a client forASIdentifierManagerandATTrackingManager, it provides interfaces for the following operations:requestAuthorizationStatus() -> AnyPublisher<AuthorizationStatus, Never>requestAuthorization() -> AnyPublisher<AuthorizationStatus, Never>requestIDFA() -> AnyPublisher<UUID?, Never>Keychain
KeychainClientis a client for Security framework keychain access, it stores objects as data (UsingDataRepresentableprotocol) and provides interfaces for the following operations:saveValue<Value: DataRepresentable>(_: Value, forKey: Key, policy: AccessPolicy)loadValue<Value: DataRepresentable>(of: Value.Type = Value.self, forKey: Key) -> ValueremoveValue(forKey: Key)KeychainClient.Keycan be initialized byrawValue: Stirng,StringLiteralorStringInterpolation. Also you can use.bundle(_:Key)or.bundle(_:Bundle, _:Key)to addbundleIDprefix to your key.Notifications
NotificationsPermissionsClientis a client forUNUserNotificationCenter, it provides interfaces for the following operations:requestAuthorizationStatus() -> AnyPublisher<AuthorizationStatus, Never>requestAuthorization(options: AuthorizationOptions) -> AnyPublisher<AuthorizationStatus, Never>configureRemoteNotifications(_:)// Pass.registeror.unregisterto the functionHapticEngine
HapticEngineClientis a factory-client forHapticFeedbackclients.HapticFeedbackis a client forUIFeedbackGenerator.Usage
UserDefaults
UserDefaultsClientis a client for UserDefaults object, it stores objects as data (UsingDataRepresentableprotocol) and provides interfaces for the following operations:saveValue<Value: DataRepresentable>(_: Value, forKey: Key)loadValue<Value: DataRepresentable>(of: Value.Type = Value.self, forKey: Key) -> ValueremoveValue(forKey: Key)UserDefaultsClient.Keycan be initialized byrawValue: Stirng,StringLiteralorStringInterpolation. Also you can use.bundle(_:Key)or.bundle(_:Bundle, _:Key)to addbundleIDprefix to your key.DataRepresentable
DataRepresentablemodule provides a protocol for objects data representation. It is used byUserDefaultsClientandKeychainClientto store objects as data.Installation
Basic
You can add StandardClients to an Xcode project by adding it as a package dependency.
"https://github.com/capturecontext/swift-standard-clients.git"into the package repository URL text fieldRecommended
If you use SwiftPM for your project, you can add StandardClients to your package file.
Do not forget about target dependencies:
License
This library is released under the MIT license. See LICENSE for details.