Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c ios8上每个设备的唯一标识符_Objective C_Iphone_Ios8 - Fatal编程技术网

Objective c ios8上每个设备的唯一标识符

Objective c ios8上每个设备的唯一标识符,objective-c,iphone,ios8,Objective C,Iphone,Ios8,在使用7 serialnumber之前,我需要为ios ios8中的每个设备都有一个唯一的标识符,但不再有效,我可以使用??这是唯一的,不会改变应用程序的设计和重新安装。始终保持不变您可以将小数据项保存在钥匙链中,即使删除并重新安装应用程序,这些数据项也会保持不变 在应用程序启动时检索if序列号,如果序列号不存在于密钥链中,则创建UUID并将其保存在密钥链中。使用钥匙链键,如“SerialNumber” UUID将在该设备上的卸载和重新安装期间存在,并保证在所有空间和时间内都是唯一的。解决方案

在使用7 serialnumber之前,我需要为ios ios8中的每个设备都有一个唯一的标识符,但不再有效,我可以使用??这是唯一的,不会改变应用程序的设计和重新安装。始终保持不变

您可以将小数据项保存在钥匙链中,即使删除并重新安装应用程序,这些数据项也会保持不变

在应用程序启动时检索if序列号,如果序列号不存在于密钥链中,则创建UUID并将其保存在密钥链中。使用钥匙链
,如“SerialNumber”

UUID将在该设备上的卸载和重新安装期间存在,并保证在所有空间和时间内都是唯一的。

解决方案

创建钥匙链

H=

进口 @接口SimpleKeychain:NSObject

  • (void)保存:(NSString*)服务数据:(id)数据
  • (id)加载:(NSString*)服务
  • (void)删除:(NSString*)服务
@结束

M=

导入“SimpleKeychain.h” @SimpleKeychain的实现

  • (NSMutableDictionary*)getKeychainQuery:(NSString*)服务{ 返回[NSMutableDictionary dictionaryWithObjectsAndKeys: (uu桥id)kSecClassGenericPassword,(uu桥id)kSecClass, 服务,(uu桥id)kSecAttrService, 服务,(_桥id)kSecAttrAccount, (uu桥id)ksecattracccessibleafterfirstunlock,(uu桥id)ksecattracessible, 零]; }

  • (void)保存:(NSString*)服务数据:(id)数据{ NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; SecItemDelete((uu桥CFDictionaryRef)keychainQuery); [keychainQuery setObject:[NSKeyedArchivedDataWithRootObject:data]forKey:(_桥id)kSecValueData]; SecItemAdd((uu桥CFDictionaryRef)keychainQuery,NULL); }

  • (id)加载:(NSString*)服务{ id-ret=零; NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; [keychainQuery setObject:(id)kCFBooleanTrue forKey:(_桥id)kSecReturnData]; [keychainQuery setObject:(u桥id)kSecMatchLimitOne forKey:(u桥id)kSecMatchLimit]; CFDataRef keyData=NULL; if(SecItemCopyMatching((uu桥CFDictionaryRef)keychainQuery,(CFTypeRef*)和keyData)=noErr){ @试一试{ ret=[NSKeyedUnarchiver unarchiveObjectWithData:(uu-bridge-NSData*)keyData]; } @捕获(N例外*e){ NSLog(@“未归档%@失败:%@”,服务,e); } @最后{} } if(keyData)CFRelease(keyData); 返回ret; }

  • (void)删除:(NSString*)服务{ NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; SecItemDelete((uu桥CFDictionaryRef)keychainQuery); }

@结束