我正在使用UserDefaults来存储和检索名称和密码的详细信息,但现在我想将名称和密码详细信息存储在钥匙串中以用于安全目的。我经历了这么多教程,但我不明白。是否有必要添加任何git框架,或者我们可以手动保存和检索名称和密码详细信息。如果有必要添加git框架那么请建议我在swift中存储名称和密码的最佳keychain框架。
下面是我在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
请帮我在钥匙串中存储名称和密码值。
看看这个例子:
定义一个结构,以便在内存中移动应用程序时保存凭据:
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) }