概述

仅支持 iOS。

KeychainAccess 是一个 Swift 封装包,它围绕 Keychain Services 提供的一小部分功能构建,旨在简化使用 kSecClassGenericPassword 类将数据保存到 iOS Keychain 以及从 iOS Keychain 中检索数据的过程。

虽然 Keychain Services 提供了全面的 API 集合,并且可以直接使用,但应用程序端用于保存和检索数据的实现很可能非常冗长。

简而言之,要使用 Keychain Services 安全地存储一个项目,必须首先创建一个预定义键和值的字典,也称为密钥链查询。此查询必须包含用于预定义键集的有效值,这些值取决于正在使用的安全类。为了减少创建密钥链查询所需的手动工作量,该框架利用了 Swift 的特性,例如协议的默认实现、泛型和 Codable 用于自动将模型编码为外部表示形式。

这种方法可以更清晰地与 iOS Keychain 交互,使用起来非常愉快。

特性

要求

安装

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并已集成到 swift 编译器中。

一旦你设置好了 Swift 包,添加 KeychainAccess 作为依赖项就像将其添加到你的 Package.swiftdependencies 值中一样简单。

用法

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")

对于组特定的配置,请参阅文档。

沟通

作者

贡献者