我正在使用UserDefaults来存储和检索名称和密码详细信息,但是出于安全目的,现在我想在钥匙串中存储名称和密码详细信息。我已经看了很多教程,但是我不明白。是否有必要添加任何git框架,否则我们可以手动保存和检索名称和密码详细信息。如果有必要添加git框架,那么请向我建议最好的钥匙串框架,以快速存储名称和密码。
以下是我在UserDefaults中的代码:
在注册ViewController中
UserDefaults.standard.set(regNameTextField.text, forKey: "name")
UserDefaults.standard.set(regPasswordTextField.text, forKey: "password")
在登录ViewController中
let storedregName = UserDefaults.standard.value(forKey: "name") as! String
let storedregPassword = UserDefaults.standard.value(forKey: "password") as! String
请帮助我在钥匙串中存储名称和密码值。
答案 0 :(得分:0)
看看这个例子:
定义一种结构,以在凭据在您的应用程序中移动时将其保存在内存中
struct Credentials {
var username: String
var password: String
}
接下来,定义一个错误枚举,可用于传达钥匙串访问结果:
enum KeychainError: Error {
case noPassword
case unexpectedPasswordData
case unhandledError(status: OSStatus)
}
然后,确定您的应用正在使用的服务器:
static let server = "www.example.com"
创建添加查询 使用凭证结构和服务器常量的实例,可以创建一个添加查询:
let account = credentials.username
let password = credentials.password.data(using: String.Encoding.utf8)!
var query: [String: Any] = [kSecClass as String: kSecClassInternetPassword,
kSecAttrAccount as String: account,
kSecAttrServer as String: server,
kSecValueData as String: password]
添加项目
完成查询后,您只需将其提供给SecItemAdd(_:_:)
函数:
let status = SecItemAdd(query as CFDictionary, nil)
guard status == errSecSuccess else { throw KeychainError.unhandledError(status: status) }