一个 Swift 数据库接口,用于访问 Keychain Services。
StealthyStash 提供了一个可插拔的简单抽象层,用于访问 Keychain 数据,以及一个用于在 Keychain 中编码和解码复杂数据的 API。
Apple 平台
Linux
使用 Swift Package Manager 通过存储库 URL 安装此库
https://github.com/brightdigit/StealthyStash.git
使用最高版本 1.0
。
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/server
和 GenericPasswordItem/service
,这两种类型都需要查询和创建。
您还可以提供一个
logger
用于日志记录,以及一个InternetPasswordItem.accessGroup
用于您的InternetPasswordItem
和一个GenericPasswordItem.accessGroup
用于您的GenericPasswordItem
要查询、更新或添加新密码,请查看 StealthyRepository
下的文档。
在许多情况下,您可能希望使用多个项目来存储单个对象,例如用户的密码(使用 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
对象的查询。
ModelQueryBuilder.updates(from:to:)
要求您构建一个 StealthyPropertyUpdate
对象数组,该对象定义 Keychain 的先前和新的属性。如果只是添加作为更新一部分的新项目,或者只是删除旧项目,则先前和新的属性都是可选的。
ModelQueryBuilder.properties(from:for:)
用于创建新模型,并且需要添加到 Keychain 的每个项目的单个 AnyStealthyProperty
。
ModelQueryBuilder.model(from:)
基于 AnyStealthyProperty
项目构建 StealthyModel
。
ModelQueryBuilder.queries(from:)
根据传递的 ModelQueryBuilder.QueryType
构建查询字典。查询字典的键将由 ModelQueryBuilder.model(from:)
使用,以定义其结果 AnyStealthyProperty
的键。如果您的应用中只有一个对象,则可以将 ModelQueryBuilder.QueryType
定义为 Void
。
static func queries(from _: Void) -> [String: Query] {
[
"password": TypeQuery(type: .internet),
"token": TypeQuery(type: .generic)
]
}
如需更多帮助,请查看 Sample
项目,这些项目位于 Swift Package 中。
更多文档可在 Swift Package Index 上找到。
此代码在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE 文件。