SwiftyKeychainKit
SwiftyKeychainKit 是一个简单的 Swift 包装器,用于 Keychain Services API,具有静态类型化的优点。在同一个位置定义您的键,轻松使用值类型,并免费获得额外的安全性和方便的编译时检查。
特性
- 静态类型和编译时检查
- Swift 5 兼容
用法
基本用法
let keychain = Keychain(service: "com.swifty.keychain")
let accessTokenKey = KeychainKey<String>(key: "accessToken")
// Save or modify value
try? keychain.save("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9", for : accessTokenKey)
// Get value
let value = try keychain.get(accessTokenKey)
// Remove value
try keychain.remove(accessTokenKey)
// Remove all values
try keychain.removeAll()
实例化
// Generic password
let keychain = Keychain(service: "com.swifty.keychainkit")
// Internet password
let keychain = Keychain(server: URL(string: "https://www.google.com")!, protocolType: .https)
定义密钥
为了方便使用,通过扩展KeychainKeys
类并添加静态属性来定义您的密钥
extension KeychainKeys {
static let username = KeychainKey<String>(key: "username")
static let age = KeychainKey<Int>(key: "age")
}
然后,在代码中可以使用快捷的点语法
// save
try? keychain.save("John Snow", for: .username)
// get
let username = try keychain.get(.username)
获取值
您可以使用subscripts
和dynamicCallable
语法糖来以Result<ValueType, KeychainError>
类型获取值
let username = try keychain[.username].get()
// or
if case .success(let age) = keychain[.age] {
...
}
let username = try keychain(.username).get()
// or
if case .success(let age) = keychain(.age) {
...
}
subscripts
和dynamicCallable
语法仅用于获取值。由于Swift语言的限制,当前不能实现带有错误处理的setter。
默认值
您可以为GET方法提供默认值,如果密钥链密钥为nil,则将使用此值,不会抛出错误。
try keychain.get(.username, default: "Daenerys Targaryen")
// or
try keychain[.age, default: 18].get()
支持的类型
- Int
- String
- Double
- Float
- Bool
- Data
等等
- Codable
- NSCODING
支持属性
通用
- kSecAttrAccessGroup
- kSecAttrAccessible
- kSecAttrDescription
- kSecAttrComment
- kSecAttrCreator
- kSecAttrType
- kSecAttrLabel
- kSecAttrIsInvisible
- kSecAttrIsNegative
- kSecAttrAccount
- kSecAttrSynchronizable
通用密码
- kSecAttrAccessControl
- kSecAttrService
- kSecAttrGeneric
互联网密码
- kSecAttrSecurityDomain
- kSecAttrServer
- kSecAttrProtocol
- kSecAttrAuthenticationType
- kSecAttrPort
- kSecAttrPath
支持更多类型
待定
需求
Swift 版本 5.0
平台 | 可用性 |
---|---|
iOS | >= 12 |
macOS | - |
tvOS | - |
watchOS | - |
安装
CocoaPods
pod 'SwiftyKeychainKit', '1.0.0-beta.2'
Swift 包管理器
let package = Package(
dependencies: [
.Package(url: "https://github.com/andriyslyusar/SwiftyKeychainKit.git", .exact("1.0.0-beta.2"))
]
)
Carthage
github "andriyslyusar/SwiftyKeychainKit" "1.0.0-beta.2"
致谢
- SwiftyUserDefaults - API 设计灵感
- KeychainAccess - API包装知识来源
作者
Andriy Slyusar
许可
SwiftyKeychainKit遵循MIT许可协议。更多信息请参阅许可文件。