LeadKit/TIKeychainUtils
Ivan Smolin 2bf1fc052a feat: Custom string attributes to `BaseTextAttributes`
- Customizeable `UIViewBackground` and `UIViewBorder` for `UIView.Appearance`
- Keychain single value storage for codable models -`CodableSingleValueKeychainStorage`
- Renamed methods `startAnimation` and `stopAnimation` of `SkeletonPresenter`, so it won't conflict with `Animatable` protocol anymore
2023-10-09 23:03:51 +03:00
..
Sources feat: Custom string attributes to `BaseTextAttributes` 2023-10-09 23:03:51 +03:00
TIKeychainUtils.app feat: Custom string attributes to `BaseTextAttributes` 2023-10-09 23:03:51 +03:00
PlaygroundPodfile build: update changelog and podspec versions 2023-07-10 16:37:27 +03:00
README.md feat: Fix pr issue 2021-04-30 13:18:27 +03:00
TIKeychainUtils.playground feat: add TIKeychainUtils playground with SingleValueStorage examples 2023-05-24 15:50:59 +03:00
TIKeychainUtils.podspec feat: Custom string attributes to `BaseTextAttributes` 2023-10-09 23:03:51 +03:00

README.md

TIKeychainUtils

Set of helpers for Keychain classes. Bunch of CodableBackingStore from TIFoundationUtils and KeychainAccess. Implement

@propertyWrapper example

extension StorageKey {
    static var userProfileKey: StorageKey<UserProfile> {
        .init(rawValue: "userProfileKey")
    }
}

extension Bundle {
    var bundleId: String {
        Bundle.main.bundleIdentifier ?? .empty
    }
}

extension Keychain {
    static var defaultKeychain: Keychain {
        .init(service: Bundle.main.bundleId)
    }
}

final class ViewModel {
    @KeychainCodableBackingStore(key: .userProfileKey, codableKeyValueStorage: .defaultKeychain)

    private(set) var profile: UserProfile?
    
    func updateProfile(newProfile: UserProfile?) {
        profile = newProfile
    }
}