仅支持 iOS。
KeychainAccess 是一个 Swift 封装包,它围绕 Keychain Services 提供的一小部分功能构建,旨在简化使用 kSecClassGenericPassword
类将数据保存到 iOS Keychain 以及从 iOS Keychain 中检索数据的过程。
虽然 Keychain Services 提供了全面的 API 集合,并且可以直接使用,但应用程序端用于保存和检索数据的实现很可能非常冗长。
简而言之,要使用 Keychain Services 安全地存储一个项目,必须首先创建一个预定义键和值的字典,也称为密钥链查询。此查询必须包含用于预定义键集的有效值,这些值取决于正在使用的安全类。为了减少创建密钥链查询所需的手动工作量,该框架利用了 Swift 的特性,例如协议的默认实现、泛型和 Codable
用于自动将模型编码为外部表示形式。
这种方法可以更清晰地与 iOS Keychain 交互,使用起来非常愉快。
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift
编译器中。
一旦你设置好了 Swift 包,添加 KeychainAccess 作为依赖项就像将其添加到你的 Package.swift
的 dependencies
值中一样简单。
KeychainAccess Swift 包当前支持两种访问类型 - 应用程序特定和组特定。
入门很简单。首先,使用支持的访问类型之一创建密钥链实例。
let keychain = Keychain(.appSpecific(access: .afterFirstUnlock, serviceName: "App"))
任何你想加密并存储在 iOS Keychain 中的自定义类型都需要遵守并实现 KeychainItem
协议。 KeychainItem
协议为其所有属性提供了默认实现 - 除了 idKey
。 有关更多信息,请参阅文档。
struct User: KeychainItem {
let username: String
let password: String
// MARK: - KeychainItem
var idKey: String {
return username
}
}
Keychain 提供了许多方法,允许你保存、删除或检索项目。
let user = User(username: "username", password: "password")
// save
try? keychain.save(user)
// retrieve users
let users = try? keychain.items(ofType: User.self)
// retrieve a single user
let user = try? keychain.item(ofType: User.self, idKey: "username")
对于组特定的配置,请参阅文档。