使用轻量开源框架SSKeychain储存密码到keychain中

使用SSKeychain将密码储存密码至keychain的方法

Apple本身是提供关于kaychain储存的API的,但是使用方法较为繁杂,需要自己构建字典之类的,而我们的需求功能可能很简单,只是存个密码之类的,这时候就可以使用开源的SSKeychain,github地址https://github.com/samsoffes/sskeychain。SSKeychain是fork自SAMKeychain,是MIT的license,这也是一个很好的密码储存框架,只支持ARC编译。

具体使用

使用只需要导入sskeychain.h和sskeychain.m至工程,并加入系统的security.framework框架,然后就可以用啦。用法其实readme文件中写的挺详细。常用的几个函数如下。

+ (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;

具体应用测试如下

- (void)checkSSKeychain
{
    NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];//获得本应用的bundle ID
    NSLog(@"bundle id = %@", bundleID);
    NSError *error = nil;
    [SSKeychain passwordForService: bundleID account: @"youraccount" error: &error];
    if([error code] == SSKeychainErrorNotFound){
        NSLog(@"无密码");
        [SSKeychain setAccessibilityType:kSecAttrAccessibleWhenUnlockedThisDeviceOnly];//设置该密码的权限只有在手机解锁、此台设备才可获得。
        [SSKeychain setPassword:@"yourkey" forService:bundleID account:@"youraccount"];
    }
    else {
        NSLog(@"密码是 %@", [SSKeychain passwordForService: bundleID account: @"youraccount"]);
    }
}

你可能感兴趣的:(objective-c)