Ios 在swift5中更新和删除密钥链时出现问题
我在更新和删除密钥链时遇到问题Ios 在swift5中更新和删除密钥链时出现问题,ios,swift,keychain,swift5,Ios,Swift,Keychain,Swift5,我在更新和删除密钥链时遇到问题 public func clearKeychain(username: String) throws -> Any?{ let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: username ] let status = SecItemDelete(qu
public func clearKeychain(username: String) throws -> Any?{
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: username
]
let status = SecItemDelete(query as CFDictionary)
if status != errSecSuccess {
throw KeychainError.unhandledError(status: status)
}
print("Clear Keychain")
return status
}
public func updateKeychain(username: String, password: String) throws -> Any?{
let credentials = Credentials.init(username: username, password: password)
let data = credentials.password.data(using: .utf8)!
// store password as data and if you want to store username
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: username,
kSecValueData as String: data]
let fields: [String: Any] = [
kSecAttrAccount as String: username,
kSecValueData as String: data
]
let status = SecItemUpdate(query as CFDictionary, fields as CFDictionary)
guard status == errSecSuccess else {
throw KeychainError.unhandledError(status: status) }
print("Updated Password")
return status
}
用法:
let _ = (try? keychain.clearKeychain(username: "KeychainUser")) as Any?
let _ = (try? keychain.updateKeychain(username: "KeychainUser", password: "123456789")) as Any?
无法删除或更新密钥链。我在创建和获取钥匙链的价值方面没有问题,但在更新或删除钥匙链时遇到了问题。没有显示错误。状态返回零。要更新和删除您的项目,您需要搜索特定类型的数据。所以您不需要在查询中传递数据。只需更新您的查询,如下所示将解决更新数据的问题
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword]
默认情况下,keychain services删除所有匹配的keychain项
搜索参数。如果要删除要删除的特定项目
已经有对的引用或持久引用,请将其添加到
搜索字典作为kSecMatchItemList键的值。在这个
这样,您就可以将删除限制为只删除指定的项
没有显示错误。当然不是因为您忽略了错误。并且
状态
值不是任何
(甚至不是任何?
),状态
是一个整数,如果它不是零,则表示错误。它可以通过SecCopyErrorMessageString
显示为可读字符串。无论如何,这两种方法的返回值都是毫无意义的。很高兴能帮助您。