KeychainItemWrapper是apple官方例子「GenericKeychain」裏一個訪問keychain經常使用操做的封裝類,在官網上下載了GenericKeychain項目後,只須要把「KeychainItemWrapper.h」和「KeychainItemWrapper.m」拷貝到咱們項目,並導入Security.framework 。KeychainItemWrapper的用法: ios
/** 初始化一個保存用戶賬號的KeychainItemWrapper */ KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number" accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"]; //保存賬號 [wrapper setObject:@"<賬號>" forKey:(id)kSecAttrAccount]; //保存密碼 [wrapper setObject:@"<賬號密碼>" forKey:(id)kSecValueData]; //從keychain裏取出賬號密碼 NSString *password = [wrapper objectForKey:(id)kSecValueData]; //清空設置 [wrapper resetKeychainItem];其中方法「- (void)setObject:(id)inObject forKey:(id)key;」裏參數「forKey」的值應該是Security.framework 裏頭文件「SecItem.h」裏定義好的key,用其餘字符串作key程序會崩潰!
#import <UIKit/UIKit.h> @interface SFHFKeychainUtils : NSObject { } /** 從Keychain裏獲取用戶密碼 *param username 用戶名 *param serviceName 服務名 *return NSString 用戶名對應的密碼 */ + (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error; /** *把用戶的密碼保存到Keychain裏 *@param username 用戶名 *@param password 要保存的密碼 *@param serviceName 本條keychains所屬的服務(組) *return BOOL 是否存儲成功 */ + (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error; /** * 刪除某個用戶信息 *param username 用戶名 *param serviceName 用戶所屬的服務(組) *return BOOL 是否刪除成功 */ + (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error; @end使用方法:
#define ServiceName @"com.mycompany.yourAppServiceName" NSError *error; NSString *userName = @"<用戶名>"; NSString *password = @"<用戶密碼>"; /** 保存用戶的密碼*/ BOOL saved = [SFHFKeychainUtils storeUsername:userName andPassword:password forServiceName:ServiceName updateExisting:YES error:&error ]; if (!saved) { NSLog(@"保存密碼時出錯:%@", error); } error = nil; NSString *thePassword = [SFHFKeychainUtils getPasswordForUsername:userName andServiceName:ServiceName error:&error]; if(error){ NSLog(@"從Keychain裏獲取密碼出錯:%@", error); }