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) -> Value
removeValue(forKey: Key)
removeAllValues()
MemoryCacheClient
MemoryCacheClient
is build on top ofNSCache
. Under the hood it usesMemoryCache
wrapper, 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 ownCacheClient
implementations.IDFA
IDFAPermissionClient
is a client forASIdentifierManager
andATTrackingManager
, it provides interfaces for the following operations:requestAuthorizationStatus() -> AnyPublisher<AuthorizationStatus, Never>
requestAuthorization() -> AnyPublisher<AuthorizationStatus, Never>
requestIDFA() -> AnyPublisher<UUID?, Never>
Keychain
KeychainClient
is a client for Security framework keychain access, it stores objects as data (UsingDataRepresentable
protocol) 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) -> Value
removeValue(forKey: Key)
KeychainClient.Key
can be initialized byrawValue: Stirng
,StringLiteral
orStringInterpolation
. Also you can use.bundle(_:Key)
or.bundle(_:Bundle, _:Key)
to addbundleID
prefix to your key.Notifications
NotificationsPermissionsClient
is a client forUNUserNotificationCenter
, it provides interfaces for the following operations:requestAuthorizationStatus() -> AnyPublisher<AuthorizationStatus, Never>
requestAuthorization(options: AuthorizationOptions) -> AnyPublisher<AuthorizationStatus, Never>
configureRemoteNotifications(_:)
// Pass.register
or.unregister
to the functionHapticEngine
HapticEngineClient
is a factory-client forHapticFeedback
clients.HapticFeedback
is a client forUIFeedbackGenerator
.Usage
UserDefaults
UserDefaultsClient
is a client for UserDefaults object, it stores objects as data (UsingDataRepresentable
protocol) and provides interfaces for the following operations:saveValue<Value: DataRepresentable>(_: Value, forKey: Key)
loadValue<Value: DataRepresentable>(of: Value.Type = Value.self, forKey: Key) -> Value
removeValue(forKey: Key)
UserDefaultsClient.Key
can be initialized byrawValue: Stirng
,StringLiteral
orStringInterpolation
. Also you can use.bundle(_:Key)
or.bundle(_:Bundle, _:Key)
to addbundleID
prefix to your key.DataRepresentable
DataRepresentable
module provides a protocol for objects data representation. It is used byUserDefaultsClient
andKeychainClient
to 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.