Take the 2-minute tour ×

I want to be able to create a GUID/UUID on the iPhone and iPad.

The intention is to be able to create keys for distributed data that are all unique. Is there a way to do this with the iOS SDK?

share|improve this question
add comment

6 Answers

up vote 196 down vote accepted
[[UIDevice currentDevice] uniqueIdentifier]

Returns the Unique ID of your iPhone.

EDIT: This is now deprecated and apps are being rejected from the App Store for using it. The method below is now the preferred approach.

If you need to create several UUID, just use this method (with ARC):

+ (NSString *)GetUUID
  CFStringRef string = CFUUIDCreateString(NULL, theUUID);
  return (__bridge NSString *)string;

EDIT: Jan, 29 2014: If you're targeting iOS 6 or later, you can now use the much simpler method:

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

share|improve this answer
[[UIDevice currentDevice] uniqueIdentifier] has been deprecated as of iOS 5, and Apple is now rejecting apps that use it (as of March 2012). The rest of the response is still accurate. –  Gorm Mar 28 '12 at 20:15
+1 for source code –  Suchi Apr 6 '12 at 20:16
Having been around this question for a while, I'm pretty sure the original question wasn't about the device's unique identifier, but about just getting a useful general unique identifier for something. –  Ryan McCuaig Apr 12 '12 at 3:43
To make this ARC compliant you must cast the string object and remove the autorelease call. In other words add the cast: NSString* string = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, theUUID); –  Paul de Lange May 7 '12 at 8:05
As of iOS 6 you can use: NSString *UUID = [[NSUUID UUID] UUIDString]; –  Symmetric Nov 19 '12 at 18:36
show 2 more comments

Reviewing the Apple Developer documentation I found the CFUUID object is available on the iPhone OS 2.0 and later.

share|improve this answer
that's exactly what I was after, thanks –  rustyshelf Jan 9 '09 at 6:48
add comment

I've uploaded my simple but fast implementation of a Guid class for ObjC here: obj-c GUID

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

It can parse to and from various string formats as well.

share|improve this answer
add comment

In iOS 6 you can easily use:

NSString* stringUUID = [UUID UUIDString];

More details in Apple's Documentations

share|improve this answer
This is by far the simplest solution. If you don't have to support prior to iOS 6, use this. I was using core data generated permanent IDs, but this is much better. +1 –  Sean Aug 2 '13 at 17:55
Perfect, thank you for this! This is my +1 answer for the day :) –  justinhartman Nov 25 '13 at 13:27
add comment

Here is the simple code I am using, compliant with ARC.

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

    return uuidString;
share|improve this answer
Honestly this should be the accepted answer, the original question asked for a GUID or UUID generator, and everyone responded with how to obtain the phone's UDID. A Universally Unique Identifier (UUID) and Unique Device Identifier (UDID) are not the same thing. –  Joe Mar 11 '13 at 1:51
add comment

The simplest technique is to use NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. See the NSProcessInfo class reference.

share|improve this answer
That returns a unique identifier for the process. It has no resemblance to a GUID. From the docs: "The ID includes the host name, process ID, and a time stamp, which ensures that the ID is unique for the network" –  Matt Spradley May 1 '11 at 2:21
You could be right. It's a pragmatic one-liner, and probably isn't as bulletproof as CFUUID. Anyone who needs the greater rigour ought to drop down to CoreFoundation. –  Ryan McCuaig May 6 '11 at 18:51
add comment

protected by Brad Larson Jul 2 '12 at 15:21

