SSKeychain 是一个简单的封装,用于访问帐户、获取密码、设置密码和删除密码,使用 Mac OS X 和 iOS 上的系统密钥链。
如果您使用 CocoaPods,只需将以下内容添加到您的 Podfile 中
pod 'SSKeychain'
要手动添加到项目中
Security.framework
添加到您的目标SSKeychain.h
、SSKeychain.m
、SSKeychainQuery.h
和 SSKeychainQuery.m
添加到项目中。SSKeychain 需要 ARC。
注意:目前 SSKeychain 不支持 Mac OS 10.6。
SSKeychain 有以下类方法用于与系统密钥链交互
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (void)setAccessibilityType:(CFTypeRef)accessibilityType;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;
就这么简单。(有关全部方法,请参阅 SSKeychain.h 和 SSKeychainQuery.h。)
请参阅在线文档:SSKeychain 文档。
如果将数据保存到密钥链失败,请使用 NSError 对象来处理它。您可以调用 [error code]
来获取数字错误代码。SSKeychain.h 中定义了一些值,其余在 SecBase.h 中定义。
NSError *error = nil;
SSKeychainQuery *query = [[SSKeychainQuery alloc] init];
query.service = @"MyService";
query.account = @"soffes";
[query fetch:&error];
if ([error code] == errSecItemNotFound) {
NSLog(@"Password not found");
} else if (error != nil) {
NSLog(@"Some other error occurred: %@", [error localizedDescription]);
}
显然,您应该做更复杂的事情。如果只需要错误消息,可以调用 [error localizedDescription]
。
使用密钥链是非常糟糕的。您真的应该检查错误和失败。此库并没有使它更稳定,它只是封装了所有讨厌的 C 语言 API。
您也应该不使用默认设置,并设置 accessibilityType
。对于大多数应用程序,kSecAttrAccessibleWhenUnlocked
应该工作。有关其他选项,请参阅 Apple 文档。
这最初是受到 EMKeychain 和 SDKeychain 的启发(两者现在都已消失)。感谢作者们。自那时起,SSKeychain 已切换到从 SSToolkit 抽象出来的更简单实现。
非常感谢Caleb Davenport为SSKeychain 1.0版本所做的引领工作。