使用面向协议编程实现的Keychain API的Swift包装器。
您创建一个实现KeychainGenericPasswordType
协议的实现,它封装了您想要在Keychain
中存储的数据。大部分实现都是通过使用默认协议实现完成的,例如设置默认的服务名称和访问模式(kSecAttrAccessibleWhenUnlocked
)。
然后您通过调用KeychainItemType
方法保存、删除或从提供的作为参数的KeychainServiceType
协议实现中获取项目。
假设我们要在Keychain中存储Instagram账户的访问令牌和用户名
struct InstagramAccount: KeychainGenericPasswordType {
let accountName: String
let token: String
var data = [String: AnyObject]()
var dataToStore: [String: AnyObject] {
return ["token": token]
}
var accessToken: String? {
return data["token"] as? String
}
init(name: String, accessToken: String = "") {
accountName = name
token = accessToken
}
}
在var dataToStore: [String: AnyObject]
中返回您想要保存在Keychain中的Dictionary,当从Keychain中获取项目时,其数据将填充到您的var data: [String: AnyObject]
属性中。
let newAccount = InstagramAccount(name: "John", accessToken: "123456")
do {
try newAccount.saveInKeychain()
} catch {
print(error)
}
注意:提供的KeychainServiceType
协议实现将替换Keychain数据库中已经存在的项目。
let account = InstagramAccount(name: "John")
do {
try account.removeFromKeychain()
} catch {
print(error)
}
var account = InstagramAccount(name: "John")
do {
try account.fetchFromKeychain()
if let token = account.accessToken {
print("name: \(account.accountName), token: \(token)")
}
} catch {
print(error)
}
SwiftKeychain需要Swift 2.0和XCode 7,并支持iOS、OSX、watchOS和tvOS。
将Keychain/Keychain.swift
文件复制到您的项目中。
SwiftKeychain是在MIT许可证下发布的,有关更多信息,请参阅LICENSE.txt文件。