一个简单而现代的密钥链包装器。这是通用的,适用于 iOS 和 OSX。
该组件的设计目标是替换先前使用的变得非常复杂的密钥链包装器。它也旨在可扩展以支持未来的附加密钥链项:网络密码、证书、身份等。您有这些用例吗?让我们知道!
创建一个新的通用密码
// get shared instance
DTKeychain *keychain = [DTKeychain sharedInstance];
// just create a new instance of the generic password and set values
DTKeychainGenericPassword *pass = [DTKeychainGenericPassword new];
pass.account = @"bar";
pass.service = @"foo";
pass.password = @"*****";
// write the new object to the keychain
NSError *error;
if (![keychain writeKeychainItem:pass error:&error])
{
NSLog(@"%@", [error localizedDescription]);
}
在密钥链项被写入之后,填充了额外的信息,如持久引用。这允许您稍后对其进行修改或删除。因此,更新代码是相同的
pass.password = @"different";
NSError *error;
if (![keychain writeKeychainItem:pass error:&error])
{
NSLog(@"%@", [error localizedDescription]);
}
要获取所有匹配特定服务的项目。注意,服务和账户都可以为 nil。
// get shared instance
DTKeychain *keychain = [DTKeychain sharedInstance];
// create a keychain query for generic passwords
NSDictionary *query = [DTKeychainGenericPassword keychainItemQueryForService:@"foo"
account:nil];
// retrieve matching keychain items
NSError *error;
NSArray *items = [keychain keychainItemsMatchingQuery:query error:&error];
if (!items)
{
NSLog(@"%@", [error localizedDescription]);
}
在 iOS 上,密钥链项目通过访问组进行沙盒隔离。DTKeychain 依赖于内置的系统安全性,不人为地限制您可以查询的项目。这意味着您也可以查询其他现有的通用密码密钥链项目,如 OSX 上的 WiFi 密码。
在 OSX 上,当您尝试检索安全数据(也称为密码)时,会要求用户对每个项目进行权限。在 iOS 上,访问通过可访问性参数进行调节。在 iOS 上,DTKeychain 可以检索查询项的密码。在 OSX 上,您必须对每个项目单独调用 retrieveSecuredDataForKeychainItem:error:
// only necessary at an opportune moment on OSX, might cause an
// access prompt alert to appear
NSError *error;
if (![keychain retrieveSecuredDataForKeychainItem:pass error:&error]
{
NSLog(@"%@", [error localizedDescription]);
}
它是开源的,适用标准 2 条款 BSD 许可证。这意味着您必须提及 Cocoanetics 作为此代码的原始作者,并在您的应用程序中复制 LICENSE 文本。
您可以为 75 欧元购买免责声明许可证,这样就不需要包括 LICENSE 文本。