2013-05-13 53 views

回答

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:

  1. 只需下载App Store上提供的最新Xcode(Apple不提供仅下载SDK的选项)。
  2. 如果想保持目前只是版本的Xcode
    • 下载最新版本的Xcode。
    • 副本的iOS SDK库来自:

newestXcode.app /Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/

oldXcode。应用 /内容/开发者/平台/ iPhoneOS.platform/Developer/SDKs/

重新打开旧的Xcode,这就是它!

+0

尽管你不能在你的应用程序中使用Device UDID,因为它完全被Apple禁止,否则你的应用程序将被拒绝,我已经发布了关于它的细节,你可以阅读它[这里](http://stackoverflow.com/问题/ 16469566/invalid-application-binary/16475078#16475078) – 2013-05-13 08:21:18

0

可以使用/创建“自己的” UDID:

+(NSString *)getUUID 
{ 
    CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault); 
    NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId); 
    CFRelease(newUniqueId); 

    return uuidString; 
} 

你应该记住,这种方法会产生不同的ID在每次调用,所以你应该坚持它的一些如何,因此是不与UDID完全相同,但对于大多数用途来说,它甚至更好。

+0

那就是我所做的! (case版本的iOS版本<6.0),但方法CFUUIDCreateString(x,y)为每个调用返回不同的id。所以最好的做法是在NSUserDefaults字典中保存方法的第一个调用(在关闭应用程序并再次打开后保存NSUserDefaults参数)。 – evya 2013-05-13 10:05:53

+1

@evya:1.我没有看到在<6.0中使用过时的UDID的原因,而在6.0中使用了自定义的UDID;只需使用自定义的一个。 2.问题是“什么是替代方案?”,你可以坚持下去,不管你想要什么。3.我也许应该对你的答案进行评论,但是似乎在问题的唯一代码中发布了一个干净的答案对于回答求职者更有用。 – 2013-05-13 11:17:29