标签:expec release turned object ssg handle elf 通过 attrs
[[[UIDevice currentDevice] identifierForVendor] UUIDString];
根据APP供应商分配,APP卸载重装后,会重新生成。
需要通过keychain存储配合使用。
@interface YLKeyChainStore : NSObject
/**保存数据至钥匙串中*/
/**通过 key 获取数据*/
(NSMutableDictionary)getKeychainQuery:(NSString)service {
service = [self handleServiceKeyWith:service];
return[NSMutableDictionary dictionaryWithObjectsAndKeys:
(id)kSecClassGenericPassword,(id)kSecClass,
service,(id)kSecAttrService,
service,(id)kSecAttrAccount,
(id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,
nil];
}
(NSString)handleServiceKeyWith:(NSString)service {
return [NSString stringWithFormat:@"%@%@",AppBundleID(),service];
}
(void)save:(NSString)service data:(id)data{
//Get search dictionary
NSMutableDictionarykeychainQuery = [self getKeychainQuery:service];
//Delete old item before add new item
SecItemDelete((CFDictionaryRef)keychainQuery);
//Add new object to searchdictionary(Attention:the data format)
[keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data]forKey:(id)kSecValueData];
//Add item to keychain with the searchdictionary
SecItemAdd((CFDictionaryRef)keychainQuery,NULL);
}
(id)load:(NSString)service {
id ret =nil;
NSMutableDictionarykeychainQuery = [self getKeychainQuery:service];
//Configure the search setting
//Since in our simple case we areexpecting only a single attribute to be returned (the password) wecan set the attribute kSecReturnData to kCFBooleanTrue
[keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
[keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
CFDataRef keyData =NULL;
if(SecItemCopyMatching((CFDictionaryRef)keychainQuery,(CFTypeRef)&keyData) ==noErr){
@try{
ret =[NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData*)keyData];
}@catch(NSException e) {
NSLog(@"Unarchiveof %@ failed: %@",[self handleServiceKeyWith:service], e);
}@finally{
}
}
if(keyData)
CFRelease(keyData);
return ret;
}
(void)deleteKeyData:(NSString)service {
NSMutableDictionarykeychainQuery = [self getKeychainQuery:service];
SecItemDelete((CFDictionaryRef)keychainQuery);
}
/** 获取UUID*/
标签:expec release turned object ssg handle elf 通过 attrs
原文地址:https://www.cnblogs.com/xbios/p/11890522.html