Apple 不允许将应用程序添加到使用 [UIDevice uniqueIdentifier] 的应用商店,因为该属性在 iOS SDK 6.0 中变为私有
什么是替代品?
Apple 不允许将应用程序添加到使用 [UIDevice uniqueIdentifier] 的应用商店,因为该属性在 iOS SDK 6.0 中变为私有
什么是替代品?
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
- (NSString*)deviceId {
NSString *udidString;
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
udidString = [defaults objectForKey:@"udidKey"];
if (!udidString) {
CFUUIDRef identifierObject = CFUUIDCreate(kCFAllocatorDefault);
// Convert the CFUUID to a string
udidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, identifierObject);
[defaults setObject:udidString forKey:@"udidKey"];
[defaults synchronize];
CFRelease((CFTypeRef) identifierObject);
}
} else {
udidString = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return udidString;
}
如果在线得到警告:udidString = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
这意味着 Xcode SDK小于 6.0
(Xcode 4.3包含 iOS SDK 5.1,Xcode 4.5包含 iOS SDK 6.0)
更新 Xcode iOS SDK:
如果只想保留当前的 Xcode 版本:
最新的Xcode.app /Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
到
oldXcode.app /Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
重新打开旧的 Xcode,就是这样!
您可以使用/创建“您自己的”UDID:
+(NSString *)getUUID
{
CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
CFRelease(newUniqueId);
return uuidString;
}
您应该记住,此方法将在每次调用时产生不同的 id,因此您应该以某种方式持久化它,因此它不是 UDID 的相同替代方案,但对于大多数用途来说,它甚至更好。