首页 > 解决方案 > 无法访问钥匙串项 iOS

问题描述

我们在钥匙串中存储了一些用户信息。我们收到报告称,对于某些将数据存储在钥匙串中的用户,检索失败。

在什么情况下 kSecClassGenericPassword 属性会失败?

代码:

let query = [
            kSecClass as String       : kSecClassGenericPassword,
            kSecAttrAccount as String : key,
            kSecReturnData as String  : kCFBooleanTrue!,
            kSecMatchLimit as String  : kSecMatchLimitOne ] as [String : Any]

        var dataTypeRef: AnyObject? = nil

        let status: OSStatus = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)

店铺代码:

func save(key: String, data: Data) -> OSStatus {
        let query = [
            kSecClass as String       : kSecClassGenericPassword as String,
            kSecAttrAccount as String : key,
            kSecValueData as String   : data ] as [String : Any]

        SecItemDelete(query as CFDictionary)

        return SecItemAdd(query as CFDictionary, nil)
    }
    

提一下:检索数据的代码每秒可以调用多次。这会“强调”钥匙链吗?

标签: ioskeychain

解决方案


根据您在创建项目时指定的访问权限,可能无法检索它,例如,如果用户没有密码、手机被锁定、关闭或更改生物识别,或者从备份中恢复另一部手机上的应用程序.


推荐阅读