Save and retrieve value via KeyChain

后端 未结 7 1774
自闭症患者
自闭症患者 2020-12-02 09:51

I\'m trying to store an Integer and retrieve it using KeyChain.

This is how I save it:

func SaveNumberOfImagesTaken()
    {
        let key = \"IMAGE         


        
7条回答
  •  爱一瞬间的悲伤
    2020-12-02 09:58

    I tried to make it as simple as possible.

    fileprivate class KeychainService {
    
      static func updatePassword(_ password: String, serviceKey: String) {
        guard let dataFromString = password.data(using: .utf8) else { return }
    
        let keychainQuery: [CFString : Any] = [kSecClass: kSecClassGenericPassword,
                                               kSecAttrService: serviceKey,
                                               kSecValueData: dataFromString]
        SecItemDelete(keychainQuery as CFDictionary)
        SecItemAdd(keychainQuery as CFDictionary, nil)
      }
    
      static func removePassword(serviceKey: String) {
    
        let keychainQuery: [CFString : Any] = [kSecClass: kSecClassGenericPassword,
                                               kSecAttrService: serviceKey]
    
        SecItemDelete(keychainQuery as CFDictionary)
      }
    
      static func loadPassword(serviceKey: String) -> String? {
        let keychainQuery: [CFString : Any] = [kSecClass : kSecClassGenericPassword,
                                               kSecAttrService : serviceKey,
                                               kSecReturnData: kCFBooleanTrue,
                                               kSecMatchLimitOne: kSecMatchLimitOne]
    
        var dataTypeRef: AnyObject?
        SecItemCopyMatching(keychainQuery as CFDictionary, &dataTypeRef)
        guard let retrievedData = dataTypeRef as? Data else { return nil }
    
        return String(data: retrievedData, encoding: .utf8)
      }
    
      static func flush()  {
        let secItemClasses =  [kSecClassGenericPassword]
        for itemClass in secItemClasses {
          let spec: NSDictionary = [kSecClass: itemClass]
          SecItemDelete(spec)
        }
      }
    }
    

提交回复
热议问题