一个 Swift 库,用于与所有 Apple 设备上的钥匙串进行交互。 支持 macOS、iOS/iPadOS、tvOS、visionOS 和 watchOS。
简化在 Apple 设备上以原生方式运行的所有 Swift 代码对钥匙串的使用。
kSec...
常量。使用 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 上的签名提交 中找到更多信息。
在提交你的拉取请求之前,请执行以下操作
swift test
验证 macOS 功能。xcodebuild test -scheme Haversack-Package -destination 'platform=iOS Simulator,name=iPhone 14'
验证 iOS 功能。xcodebuild test -scheme Haversack-Package -destination 'platform=tvOS Simulator,name=Apple TV 4K (3rd generation)'
验证 tvOS 功能。xcodebuild test -scheme Haversack-Package -destination 'platform=watchOS Simulator,name=Apple Watch Series 9 (41mm)'
验证 watchOS 功能。xcodebuild test -scheme Haversack-Package -destination 'platform=visionOS Simulator,name=Apple Vision Pro'
验证 visionOS 功能。