2009-01-09 89 views
188

我希望能够在iPhone和iPad上创建GUID/UUID。如何使用iPhone SDK创建GUID/UUID

意图是能够为分布式数据创建全部唯一的密钥。有没有办法用iOS SDK来做到这一点?

+3

有一篇关于如何确保您永远不会丢失生成的UUID的文章,即使是iOS 5及更高版本使用KeyChain。 https://blog.onliquid.com/persistent-device-unique-identifier-ios-keychain/ – jasoares 2015-05-28 16:44:56

回答

306
[[UIDevice currentDevice] uniqueIdentifier] 

返回您的iPhone的唯一ID。

编辑:-[UIDevice uniqueIdentifier]现在已被弃用,应用程序被拒绝从App Store使用它。下面的方法现在是首选的方法。

如果您需要创建多个UUID,只是用这种方法(与ARC):

+ (NSString *)GetUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return (__bridge NSString *)string; 
} 

编辑:一月,29 2014: 如果你的目标的iOS 6或更高版本,可以现在使用更简单的方法:

NSString *UUID = [[NSUUID UUID] UUIDString]; 
+21

[[UIDevice currentDevice] uniqueIdentifier]已被弃用,从iOS 5开始,Apple是现在拒绝使用它的应用程序(截至2012年3月)。其余的答复仍然是准确的。 – Gorm 2012-03-28 20:15:54

+11

围绕这个问题已经有一段时间了,我很确定最初的问题不是关于设备的唯一标识符,而是关于获取一些有用的通用唯一标识符。 – 2012-04-12 03:43:16

+12

为了使ARC符合您的要求,您必须投射字符串对象并移除autorelease调用。换句话说,添加强制转换:NSString * string =(__bridge_transfer NSString *)CFUUIDCreateString(NULL,theUUID); – 2012-05-07 08:05:10

44

回顾Apple Developer文档我发现CFUUID对象在iPhone OS 2.0和更高版本上可用。

+0

这正是我之后,谢谢 – rustyshelf 2009-01-09 06:48:25

22

最简单的技术是使用NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。请参见NSProcessInfo类参考。

7

我已经上传了我的简单而快速的实施一个GUID类的ObjC这里:obj-c GUID

Guid* guid = [Guid randomGuid]; 
NSLog("%@", guid.description); 

它可以解析,并从不同的字符串格式为好。

98

这是我使用的简单代码,符合ARC。

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

    return uuidString; 
} 
82

在iOS 6中,你可以很容易地使用:

NSUUID *UUID = [NSUUID UUID]; 
NSString* stringUUID = [UUID UUIDString]; 

的更多细节Apple's Documentations

19

斯威夫特

var uuid: String = NSUUID().UUIDString 
println("uuid: \(uuid)") 
12

雨燕3.0

var uuid = UUID().uuidString