Build Status License

Haversack: 用于钥匙串访问的 Swift 库

一个 Swift 库,用于与所有 Apple 设备上的钥匙串进行交互。 支持 macOS、iOS/iPadOS、tvOS、visionOS 和 watchOS。

目标

简化在 Apple 设备上以原生方式运行的所有 Swift 代码对钥匙串的使用。

特性

入门指南

Swift 包管理器

使用 Swift Package Manager 安装,方法是将以下内容添加到你的 Package.swift 文件中

dependencies: [
    .package(url: "https://github.com/jamf/Haversack")
],

了解更多

Haversack 包含适合使用 DocC 构建的文档。 将 Haversack 集成到项目后,使用 Xcode 的 Product > Build Documentation 菜单命令来编译文档,以便在 Developer Documentation 窗口中本地查看。

用法

基本用法

这提供了它自己的串行队列来实现线程安全,并使用 os_log 进行日志记录。 在 macOS 上,这会访问用户的登录钥匙串。

    let myHaversack = Haversack()

配置

初始化 Haversack 实例时,可以提供一个 HaversackConfiguration 结构体,其中包括访问钥匙串的设置。 其中包含串行队列的设置、要使用的策略以及在 macOS 上要使用的钥匙串文件。 如果默认值合适,则在实例化 Haversack 实例时不需要任何配置。

    // Access the system keychain on macOS
    let useSystemKeychain = HaversackConfiguration(keychain: .system)
    let systemHaversack = Haversack(configuration: useSystemKeychain)

示例代码

保存网站的密码

    let myHaversack = Haversack()
    let newPassword = InternetPasswordEntity()
    newPassword.protocol = .HTTPS
    newPassword.server = "test.example.com"
    newPassword.account = "mine"
    newPassword.passwordData = "top secret".data(using: .utf8)
    let savedPassword = try myHaversack.save(newPassword, itemSecurity: .standard, updateExisting: true)

读取网站的密码

    let myHaversack = Haversack()
    let pwQuery = InternetPasswordQuery(server: "test.example.com")
                        .matching(account: "mine")
    let passwordObj = try myHaversack.first(where: pwQuery)

    // This is the actual password info
    _ = passwordObj.passwordData

删除网站的密码,而无需先加载它

    let myHaversack = Haversack()
    let pwQuery = InternetPasswordQuery(server: "test.example.com")
                        .matching(account: "mine")
    try myHaversack.delete(where: pwQuery)

加载并使用网站的密码后删除它

    let myHaversack = Haversack()
    let pwQuery = InternetPasswordQuery(server: "test.example.com")
                        .matching(account: "mine")
                        .returning([.data, .reference])
    let passwordObj = try myHaversack.first(where: pwQuery)

    // Use the password here
    _ = passwordObj.passwordData

    // Then delete the password from the keychain
    try myHaversack.delete(passwordObj)

贡献

要为本地开发进行设置,请 fork 此仓库,在你 fork 的仓库上创建一个以你要改进的问题或工作流程命名的分支,检出你的分支,然后在 Xcode 中打开该文件夹。

此仓库需要经过验证的已签名提交。 你可以在 GitHub Docs 上的签名提交 中找到更多信息。

拉取请求

在提交你的拉取请求之前,请执行以下操作

贡献者