SSKeyChains對(duì)蘋果安全框架API進(jìn)行了簡(jiǎn)單封裝,支持對(duì)存儲(chǔ)在鑰匙串中密碼衷畦、賬戶進(jìn)行訪問,包括讀取知牌、刪除和設(shè)置祈争。SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes。
項(xiàng)目地址:https://github.com/samsoffes/sskeychain
在工程中加入SSKeyChain
在工程中加入Security.framework框架角寸。
把SSKeychain.h和SSKeychain.m加到項(xiàng)目文件夾扁藕。
使用SSKeyChain
通過以下類方法來使用SSKeyChain(請(qǐng)查看SSKeyChain.h):
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceNameaccount:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceNameaccount:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString*)serviceName account:(NSString *)account;
文檔
在Xcode中安裝SSKeyChain的幫助文檔需要以下步驟:
打開菜單 Xcode -> Preferences
選擇 Downloads
選擇 Documentation
點(diǎn)擊底部的加號(hào)按鈕,并輸入以下URL: http://docs.samsoff.es/com.samsoffes.sskeychain.atom
點(diǎn)擊”SSKeyChain Documentation”旁邊的install按鈕望薄。 (如果你看不到它疟游,也沒有提示任何錯(cuò)誤,請(qǐng)重啟Xcode)
確保在Organizer中可選的docset中能夠看到SSKeychain痕支。
此外颁虐,可以在線查看SSKeychain Documentation卧须。
調(diào)試
如果無法保存鑰匙串另绩,請(qǐng)使用SSKeychain.h中提供的錯(cuò)誤代碼,例如:
NSError *error = nil;
NSString *password = [SSKeychainpasswordForService:@"MyService" account:@"samsoffes"error:&error];
if ([error code] == SSKeychainErrorNotFound) {
NSLog(@"Passwordnot found");
}
顯然花嘶,你對(duì)做這個(gè)應(yīng)該很熟悉了笋籽。訪問鑰匙串是件痛苦的事情,你要隨時(shí)檢查它的每個(gè)錯(cuò)誤和失敗察绷。SSKeychain并沒有使它(鑰匙串)變得更穩(wěn)定干签,它僅僅是繁瑣的C APIs封裝。
示例代碼
保存一個(gè)UUID字符串到鑰匙串:
CFUUIDRef uuid = CFUUIDCreate(NULL);
assert(uuid != NULL);
CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
[SSKeychain setPassword: [NSString stringWithFormat:@"%@", uuidStr]
forService:@"com.yourapp.yourcompany"account:@"user"];
然后拆撼,從鑰匙串讀取UUID:
NSString *retrieveuuid = [SSKeychainpasswordForService:@"com.yourapp.yourcompany"account:@"user"];
注意: setPassword和passwordForSevice方法中的services 和 accounts 參數(shù)應(yīng)該是一致的容劳。