鑰匙串可存儲少量數(shù)據(jù),常用于App刪除后數(shù)據(jù)依然存儲在本地的需求
service可以隨意取,用于辨別哪個服務(wù)保存
1.增(存儲)
+ (void)saveWithService:(NSString *)service Account:(NSString *)account Password:(NSString *)password
{
NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *saveSecItems = @{(id)kSecClass: (id)kSecClassGenericPassword,
(id)kSecAttrService: service,
(id)kSecAttrAccount: account,
(id)kSecValueData: passwordData
};
SecItemAdd((CFDictionaryRef)saveSecItems, NULL);
}
2.查
+ (NSString *)queryWithService:(NSString *)service Account:(NSString *)account
{
NSDictionary *matchSecItems = @{
(id)kSecClass: (id)kSecClassGenericPassword,
(id)kSecAttrService: service,
(id)kSecAttrAccount: account,
(id)kSecMatchLimit: (id)kSecMatchLimitOne,
(id)kSecReturnData: @(YES)
};
CFTypeRef dataRef = nil;
OSStatus errorCode = SecItemCopyMatching((CFDictionaryRef)matchSecItems, (CFTypeRef *)&dataRef);
if (errorCode == errSecSuccess) {
NSString *password = [[NSString alloc] initWithData:CFBridgingRelease(dataRef) encoding:NSUTF8StringEncoding];
return password;
}
return nil;
}
3.改
+ (void)updateWithService:(NSString *)service Account:(NSString *)account Password:(NSString *)password
{
NSDictionary *queryItems = @{(id)kSecClass: (id)kSecClassGenericPassword,
(id)kSecAttrService: service,
(id)kSecAttrAccount: account
};
NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *updatedItems = @{
(id)kSecValueData: passwordData,
};
SecItemUpdate((CFDictionaryRef)queryItems, (CFDictionaryRef)updatedItems);
}
4.刪
+ (void)deleteWithService:(NSString *)service Account:(NSString *)account
{
NSDictionary *deleteSecItems = @{
(id)kSecClass: (id)kSecClassGenericPassword,
(id)kSecAttrService: service,
(id)kSecAttrAccount: account
};
SecItemDelete((CFDictionaryRef)deleteSecItems);
}
參考
iOS 鑰匙串的基本使用