DYFSwiftKeychain 1.2.0

DYFSwiftKeychain 1.2.0

Tenfay 维护。



  • 作者:
  • Tenfay

DYFSwiftKeychain

此功能用于在 Keychain 中存储文本和数据。正如您可能注意到的,Apple 的 keychain API 有点冗长。该库旨在提供简短的语法来完成任务:为指定的键读取/写入文本值

let keychain = DYFSwiftKeychain()
keychain.set("User Account Passcode", forKey: "kUserAccPasscode")
let p = keychain.get("kUserAccPasscode")

Keychain 库包括以下功能

  • 获取、设置和删除字符串、布尔值和 Data Keychain 项目。
  • 指定项目访问安全级。
  • 通过 iCloud 同步项目。
  • 与其他应用程序共享 Keychain 项目。

License MIT  CocoaPods Version  CocoaPods Platform 

中文说明

组 (ID:614799921)

安装

使用CocoaPods

use_frameworks!
target 'Your target name'

pod 'DYFSwiftKeychain'
or
pod 'DYFSwiftKeychain', '~> 1.1.0'

或者手动从SwiftKeychain目录添加文件。

什么是钥匙串(Keychain)?

钥匙串是一个安全存储区域。您可以在其中保存各种敏感数据,例如用户密码、信用卡号码、密钥令牌等。一旦信息存储在钥匙串中,就只有您的应用可以访问它,其他应用无法看到。此外,操作系统确保这些信息的安全存储和处理。例如,存储在钥匙串中的文本不能从iPhone备份或文件系统中提取。Apple建议在钥匙串中保存少量数据。如果您需要保护大量数据,您可以手动对其进行加密、保存到文件,并将密钥存储在钥匙串中。

使用方法

import DYFSwiftKeychain 添加到您的源代码中。

字符串值

let keychain = DYFSwiftKeychain()
keychain.set("User Account Passcode", forKey: "kUserAccPasscode")
let s = keychain.get("kUserAccPasscode")

数据值

let keychain = DYFSwiftKeychain()
keychain.set(data, forKey: "kCommSecureCode")
let data = keychain.getData("kCommSecureCode")

布尔值

let keychain = DYFSwiftKeychain()
keychain.set(true, forKey: "kFirstInstalledAndLaunched")
let ret = keychain.getBool("kFirstInstalledAndLaunched")

从钥匙串中删除密钥

let keychain = DYFSwiftKeychain()
let _ = keychain.delete("kFirstInstalledAndLaunched") // Remove single key.
let _ = keychain.clear() // Delete everything from app's Keychain. Does not work on macOS.

高级选项

钥匙串项目访问

使用withAccess参数指定钥匙串存储的安全性级别。默认使用.accessibleWhenUnlocked选项。这是最限制性最强的选项之一,提供良好的数据保护。

let keychain = DYFSwiftKeychain()
keychain.set("xxx", forKey:"Key1", withAccess: .accessibleWhenUnlocked)

如果您需要您的应用在后台时访问钥匙串项,可以使用.accessibleAfterFirstUnlock。请注意,这比.accessibleWhenUnlocked选项更不安全。

查看所有可用访问选项列表。

与其他设备同步钥匙串项

synchronizable属性设置为true以启用用户多个设备之间的钥匙串项同步。对于在设备上的iCloud设置中启用了“钥匙串”的用户,同步将正常工作。

synchronizable属性设置为true将使用set方法将项目添加到其他设备,并使用get命令获取可同步的项目。删除可同步的项目将从所有设备中删除它。

请注意,为了使此功能正常工作,您不需要在应用目标中启用iCloud或钥匙串共享功能。

// The first device
let keychain = DYFSwiftKeychain()
keychain.synchronizable = true
keychain.set("See you tomorrow!", forKey: "key12")

// The second device
let keychain = DYFSwiftKeychain()
keychain.synchronizable = true
let s = keychain.get("key12") // Returns "See you tomorrow!"

我们无法在macOS上实现钥匙串同步。

与其他应用共享密钥链项目

为了能够在同一设备上的应用之间共享密钥链项目,它们需要在“能力 > 密钥链共享”设置中注册相同的密钥链组

使用accessGroup属性来访问共享的密钥链项目。在下面的示例中,我们指定了访问组“9ZU3R2F3D4.com.omg.myapp.KeychainGroup”,将用于设置、获取和删除项目“key1”。

let keychain = DYFSwiftKeychain()
keychain.accessGroup = "9ZU3R2F3D4.com.omg.myapp.KeychainGroup" // Use your own access group.

keychain.set("hello world", forKey: "key1")
keychain.get("key1")
keychain.delete("key1")
keychain.clear()

注意:无法在watchOS 2.0及其配对设备之间共享密钥链项目:[论坛讨论](https://forums.developer.apple.com/thread/5938)

检查操作是否成功

您可以通过检查其返回值来验证setdeleteclear方法是否成功完成。这些方法在成功时返回true,在出错时返回false

let keychain = DYFSwiftKeychain()

if keychain.set("xxx", forKey: "key1") {
  // Keychain item is saved successfully
} else {
  // Report error
}

要获取特定失败原因,请使用包含最新操作结果的代码的osStatus属性。请参见[密钥链结果码](https://developer.apple.com/documentation/security/1542001-security_framework_result_codes)。

let keychain = DYFSwiftKeychain()

keychain.set("xxx", forKey: "key1")
if keychain.osStatus != errSecSuccess { /* Report error */ }

以引用的形式返回数据

使用asReference: true参数以引用的形式返回数据,这对于NEVPNProtocol是必需的。

let keychain = DYFSwiftKeychain()
keychain.set(data, forKey: "key1")
keychain.getData("key1", asReference: true)

在Objective-C应用中使用DYFSwiftKeychain

DYFSwiftKeychain支持在Objective-C应用中使用。

示例

DYFSwiftKeychain的使用方法可以在下面的[示例](https://github.com/chenxing640/DYFStore/blob/master/DYFStore/DYFStoreKeychainPersistence.swift)中学习。

欢迎反馈

如果您发现任何问题,遇到了创建问题的困难。我将很乐意帮助您。