StealthyStash

StealthyStash

一个 Swift 数据库接口,用于访问 Keychain Services。

SwiftPM Twitter GitHub GitHub issues GitHub Workflow Status

Codecov CodeFactor Grade codebeat badge Code Climate maintainability Code Climate technical debt Code Climate issues Reviewed by Hound

目录

简介

StealthyStash 提供了一个可插拔的简单抽象层,用于访问 Keychain 数据,以及一个用于在 Keychain 中编码和解码复杂数据的 API。

要求

Apple 平台

Linux

安装

使用 Swift Package Manager 通过存储库 URL 安装此库

https://github.com/brightdigit/StealthyStash.git

使用最高版本 1.0

用法

像访问数据库一样访问 Keychain

StealthyStash 支持添加、更新和查询通用密码和互联网密码。为此,您需要创建一个 KeychainRepository 来访问数据库。

let repository = KeychainRepository(
  defaultServiceName: "com.brightdigit.KeychainSyncDemo",
  defaultServerName: "com.brightdigit.KeychainSyncDemo",
  defaultAccessGroup: "MLT7M394S7.com.brightdigit.KeychainSyncDemo"
)

要调用 KeychainRepository.init(defaultServiceName:defaultServerName:defaultAccessGroup:defaultSynchronizable:logger:),您需要提供默认的 InternetPasswordItem/serverGenericPasswordItem/service,这两种类型都需要查询和创建。

您还可以提供一个 logger 用于日志记录,以及一个 InternetPasswordItem.accessGroup 用于您的 InternetPasswordItem 和一个 GenericPasswordItem.accessGroup 用于您的 GenericPasswordItem

要查询、更新或添加新密码,请查看 StealthyRepository 下的文档。

使用 StealthyModel 处理组合对象

在许多情况下,您可能希望使用多个项目来存储单个对象,例如用户的密码(使用 InternetPasswordItem)和令牌(通过 GenericPasswordItem)。在这种情况下,您需要使用 StealthyModel

struct CompositeCredentials: StealthyModel {
  typealias QueryBuilder = CompositeCredentialsQueryBuilder

  internal init(userName: String, password: String?, token: String?) {
    self.userName = userName
    self.password = password
    self.token = token
  }

  let userName: String

  let password: String?

  let token: String?
}

这是 StealthyModel 的完美用例,它只需要实现一个 ModelQueryBuilder,该构建器定义了如何构建用于从 Keychain 创建、更新和删除 StealthyModel 对象的查询。

static func queries(from _: Void) -> [String: Query] {
  [
    "password": TypeQuery(type: .internet),
    "token": TypeQuery(type: .generic)
  ]
}

如需更多帮助,请查看 Sample 项目,这些项目位于 Swift Package 中。

更多文档

更多文档可在 Swift Package Index 上找到。

参考

许可

此代码在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE 文件。