代客可以让你安全地存储在iOS或OS X的钥匙串数据,而无需知道一个关于钥匙串是如何工作的事情。这很容易。我们的承诺。
入门
的CocoaPods
要在iOS或OS X安装工程代客,与安装的CocoaPods
在iOS上:
platform :ios, '6.0'
pod 'Valet'
在OS X:
platform :osx, '10.10'
pod 'Valet'
迦太基
迦太基是一个分散的依赖性管理器,建立你的依赖,并为您提供二元框架。
您可以通过安装迦太基自制使用以下命令:
$ brew update
$ brew install carthage
要使用迦太基代客集成到您的Xcode项目,在你指定它Cartfile
:
github "Square/Valet"
运行迦太基
建立框架和拖动内置Valet.framework
到您的Xcode项目。
子模块
或者手动签的子模块git的子模块添加git@github.com:方/ Valet.git
,拖动Valet.xcodeproj到您的项目,并添加代客构建依赖。
用法
基本初始化
VALValet *myValet = [[VALValet alloc] initWithIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked];
要开始安全地存储数据使用代客,您需要与创建VALValet实例:
- 的识别符 - 用于标识该代客字符串。
- 辅助功能价值-一个枚举(VALAccessibility),它定义当你将能够存储和检索数据。
本实例可用于安全地存储和检索数据,但只有当装置被解锁。
选择最好的辅助价值
该VALAccessibility枚举是用来确定当你的秘密可以访问。这是一个好主意,用最严格的无障碍可能,这将使您的应用程序的功能。例如,如果您的应用没有在后台运行,你需要确保当手机用解锁只能读的秘密VALAccessibilityWhenUnlocked
或VALAccessibilityWhenUnlockedThisDeviceOnly
。
读写
NSString *const username = @"Skroob";
[myValet setString:@"12345" forKey:username];
NSString *const myLuggageCombination = [myValet stringForKey:username];
代客的用于安全地读取和写入数据的API类似于一个NSMapTable的; 使用-setObject:forKey:
和-setString:forKey:
写对象和-objectForKey:
和-stringForKey:
阅读的对象。用不同类类型创建随从,经由不同的初始值设定,或具有不同的标识符或辅助属性将不能够读取或修改值myValet
。
分享秘密在多个应用程序
VALValet *mySharedValet = [[VALValet alloc] initWithSharedAccessGroupIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked];
这个实例可以被用来存储和跨通过与价值同开发者编写的应用程序安全地检索数据Druidia
下的钥匙链访问组
中的应用程序的主要权利
的文件,当设备解锁。myValet
和mySharedValet
不能读取或修改彼此的价值观,因为两个随从分别用不同的初始化创建的。您可以使用-initWithSharedAccessGroupIdentifier:可访问
任何代客类初始化,以便在由同一个开发者编写应用程序共享的秘密。
秘密共享跨设备配合iCloud使用
VALSynchronizableValet *mySynchronizableValet = [[VALSynchronizableValet alloc] initWithIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked];
这个实例可以被用来存储和检索,可以通过这个程序在其他设备上登录到同一iCloud帐户使用iCloud的钥匙扣启用被检索的数据。mySynchronizableValet
不能读取或修改值myValet
或mySharedValet
因为mySynchronizableValet
是不同类类型的。如果该设备上未启用iCloud的钥匙扣,秘密仍然可以读取和写入,但不会同步到其他设备。
秘密保护带触摸ID或密码的设备
VALSecureEnclaveValet *mySecureEnclaveValet = [[VALSecureEnclaveValet alloc] initWithIdentifier:@"Druidia" accessControl:VALAccessControlUserPresence];
这个实例可以被用来存储和检索的安全飞地数据(可在iOS 8.0及更高版本和Mac OS 10.11及更高版本)。阅读或在此代客修改项目将要求用户确认其在iOS或输入其设备密码通过触摸ID的存在。如果没有密码设置在设备上,这种情况下将无法访问或存储数据。数据被删除从安全飞地当用户从装置的密码。使用VALSecureEnclaveValet存储的数据是存储在任的iOS或Mac OS数据最安全的方式。
迁移现有钥匙扣值到代客
已经使用的钥匙串,不再想维护自己的钥匙扣代码?我们觉得你。这就是为什么我们写-migrateObjectsMatchingQuery:removeOnCompletion:
。这种方法允许您将所有现有的钥匙串项迁移到代客实例一行。只是通过与一个NSDictionarykSecClass
,kSecAttrService
和任何其他kSecAttr *
属性使用-我们将迁移数据为您服务。
调试
代客保证它永远不会失败写入或钥匙串读除非canAccessKeychain
返回NO
。只有少数情况下,可导致钥匙串是不可访问的:
-
使用错误的
VALAccessibility
为您的使用情况。使用不当的例子包括使用VALAccessibilityWhenPasscodeSetThisDeviceOnly
当在设备上没有设置密码,或者使用VALAccessibilityWhenUnlocked
在后台运行时。 -
初始化代客与
initWithSharedAccessGroupIdentifier:
当共享访问组标识符不在您的权利文件。 -
使用
VALSecureEnclaveValet
不具有一个安全的飞地在iOS设备上。安全的飞地与引入A7芯片,它首次出现在iPhone 5S,iPad的空气和iPad迷你2。 - 从运行Xcode中的DEBUG中的应用。Xcode中有时不能正确地签上您的应用程序,这会导致失败的访问钥匙串,由于权利。如果您遇到这个问题,只是在Xcode命中再次运行。在签妥(不调试)将不会出现此问题签署建立。
- 在设备或与附加调试模拟器上运行你的应用程序也可能会导致权利的错误读取或写入时,钥匙串要返回。要解决此问题的设备,运行没有附加调试器的应用程序。没有调试器中运行一次后附有钥匙扣通常循规 蹈矩与附加调试器的几个运行过程中需要重复之前。
要求
- 的Xcode 6.3或更高版本。Xcode中的早期版本要求代客1.2.1版。
- iOS 6中或更高版本。
- OS X 10.10或更高版本。