diff --git a/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift b/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift index 21d7877..5d45e8c 100644 --- a/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift +++ b/LeadKitAdditions/Sources/Controllers/PassCode/View/BasePassCodeViewController.swift @@ -76,11 +76,22 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController initialLoadView() initialDotNumberConfiguration() - enebleKeyboard() configureBackgroundNotifications() showTouchIdIfNeeded(with: touchIdHint) } + override open func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + fakeTextField.becomeFirstResponder() + } + + override open func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + fakeTextField.resignFirstResponder() + } + // MARK: - Private functions private func configureBackgroundNotifications() { @@ -95,10 +106,6 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController .disposed(by: disposeBag) } - private func enebleKeyboard() { - fakeTextField.becomeFirstResponder() - } - private func initialDotNumberConfiguration() { dotStackView.arrangedSubviews.forEach { dotStackView.removeArrangedSubview($0) } diff --git a/LeadKitAdditions/Sources/Services/BasePassCodeService.swift b/LeadKitAdditions/Sources/Services/BasePassCodeService.swift index 5892a7c..53ce561 100644 --- a/LeadKitAdditions/Sources/Services/BasePassCodeService.swift +++ b/LeadKitAdditions/Sources/Services/BasePassCodeService.swift @@ -28,7 +28,7 @@ import IDZSwiftCommonCrypto open class BasePassCodeService { /// Override to set specific keychain service name - open class var keychainService: String { + open class var keychainServiceString: String { return Bundle.main.bundleIdentifier ?? "" } @@ -42,37 +42,34 @@ open class BasePassCodeService { // MARK: - Private stuff - fileprivate lazy var keychain: Keychain = { - return Keychain(service: BasePassCodeService.keychainService) - .synchronizable(false) - }() + private lazy var keychain = Keychain(service: BasePassCodeService.keychainServiceString).synchronizable(false) - fileprivate var passCodeHash: String? { + private var passCodeHash: String? { return keychain[Keys.passCodeHash] } - fileprivate enum Keys { + private enum Keys { static let passCodeHash = "passCodeHash" static let isTouchIdEnabled = "isTouchIdEnabled" static let isInitialLoad = "isInitialLoad" } - fileprivate enum Values { + private enum Values { static let touchIdEnabled = "touchIdEnabled" static let initialLoad = "initialLoad" } } -extension BasePassCodeService { +public extension BasePassCodeService { /// Indicates is pass code already saved on this device - public var isPassCodeSaved: Bool { + var isPassCodeSaved: Bool { return keychain[Keys.passCodeHash] != nil } /// Indicates is it possible to authenticate on this device via touch id - public var isTouchIdEnabled: Bool { + var isTouchIdEnabled: Bool { get { return keychain[Keys.isTouchIdEnabled] == Values.touchIdEnabled } @@ -82,7 +79,7 @@ extension BasePassCodeService { } /// Saves new pass code - public func save(passCode: String?) { + func save(passCode: String?) { if let passCode = passCode { keychain[Keys.passCodeHash] = sha256(passCode) } else { @@ -91,12 +88,12 @@ extension BasePassCodeService { } /// Check if pass code is correct - public func check(passCode: String) -> Bool { + func check(passCode: String) -> Bool { return sha256(passCode) == passCodeHash } /// Reset pass code settings - public func reset() { + func reset() { save(passCode: nil) isTouchIdEnabled = false }