SAMKeychain是访问帐户、获取密码、设置密码以及使用Mac OS X和iOS系统密钥链删除密码的一个简单包装类。
如果您使用CocoaPods,只需将以下代码添加到Podfile即可
pod 'SAMKeychain'
手动添加到您的项目
Security.framework
添加到您的目标SAMKeychain.h
、SAMKeychain.m
、SAMKeychainQuery.h
和SAMKeychainQuery.m
添加到您的项目。SAMKeychain需要自动引用计数。
注意:当前SAMKeychain不支持Mac OS 10.6。
SAMKeychain包含以下类方法,用于与系统密钥链一起工作:
+ (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;
就这样简单。(请参阅SAMKeychain.h和SAMKeychainQuery.h以获取所有方法。)
阅读在线文档。
如果您的密钥链保存失败,请使用NSError对象来处理。您可以调用[error code]
来获取数字错误码。一些值在SAMKeychain.h中定义,其余在SecBase.h中定义。
NSError *error = nil;
SAMKeychainQuery *query = [[SAMKeychainQuery 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(目前都已不复存在)的启发。感谢作者们。SAMKeychain随后切换到一个更简单的实现,该实现从SSToolkit抽象而来。
非常感谢Caleb Davenport为SAMKeychain 1.0版本带路。