Jak utworzyć identyfikator GUID / UUID za pomocą iOS


207

Chcę mieć możliwość utworzenia GUID / UUID na iPhonie i iPadzie.

Chodzi o to, aby móc tworzyć klucze dla rozproszonych danych, które są unikalne. Czy można to zrobić za pomocą zestawu SDK dla systemu iOS?


3
Jest artykuł o tym, jak zapewnić, że nigdy nie stracisz wygenerowanego UUID, nawet dla iOS 5 i nowszych przy użyciu KeyChain. blog.onliquid.com/…
jasoares

Odpowiedzi:


323
[[UIDevice currentDevice] uniqueIdentifier]

Zwraca unikalny identyfikator telefonu iPhone.

EDYCJA: -[UIDevice uniqueIdentifier]jest już przestarzałe, a aplikacje są odrzucane z App Store za korzystanie z niej. Poniższa metoda jest teraz preferowanym podejściem.

Jeśli chcesz utworzyć kilka UUID, po prostu użyj tej metody (z ARC):

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

EDYCJA: 29 stycznia 2014: Jeśli celujesz w iOS 6 lub nowszy, możesz teraz użyć znacznie prostszej metody:

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

21
[[UIDevice currentDevice] uniqueIdentifier] został uznany za przestarzały od iOS 5, a Apple obecnie odrzuca aplikacje, które go używają (od marca 2012). Reszta odpowiedzi jest nadal dokładna.
Gorm

13
Przez pewien czas zastanawiałem się nad tym pytaniem, jestem prawie pewien, że pierwotne pytanie nie dotyczyło unikalnego identyfikatora urządzenia, ale jedynie uzyskania użytecznego ogólnego unikalnego identyfikatora czegoś.
Ryan McCuaig,

12
Aby zapewnić zgodność z ARC, musisz rzutować obiekt ciąg i usunąć wywołanie autorelease. Innymi słowy dodaj rzut: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
Od iOS 6 możesz używać: NSString * UUID = [[NSUUID UUID] UUIDString];
Symetryczny,

1
Jeśli użyję [[NSUUID UUID] UUIDString]; w iOS7 i nowszych, czy moja aplikacja nie zostanie odrzucona przez Apple?
Whoami,

100

Oto prosty kod, którego używam, zgodny z ARC.

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

    return uuidString;
}

35
Szczerze mówiąc, powinna to być zaakceptowana odpowiedź, pierwotne pytanie dotyczyło generatora GUID lub UUID, a wszyscy odpowiedzieli, jak uzyskać identyfikator UDID telefonu. Uniwersalny unikalny identyfikator (UUID) i unikalny identyfikator urządzenia (UDID) to nie to samo.
Joe

1
tutaj jest jedna linia prosta NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

W iOS 6 możesz łatwo używać:

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

Więcej szczegółów w dokumentacji Apple


5
To zdecydowanie najprostsze rozwiązanie. Jeśli nie musisz obsługiwać wersji wcześniejszej niż iOS 6, użyj tego. Korzystałem z trwałych identyfikatorów generowanych z podstawowych danych, ale jest to znacznie lepsze. +1
Sean

Idealnie, dziękuję za to! To jest moja +1 odpowiedź na ten dzień :)
justinhartman

Zmienia się za każdym razem, gdy uruchamiam aplikację w symulatorze.
Gajendra K Chauhan

46

Przeglądając dokumentację Apple Developer, znalazłem obiekt CFUUID dostępny w systemie iPhone OS 2.0 i nowszych.



22

Najprostszą techniką jest użycie NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Zobacz odwołanie do klasy NSProcessInfo .


8
Zwraca unikalny identyfikator procesu. Nie ma podobieństwa do GUID. Z dokumentacji: „Identyfikator zawiera nazwę hosta, identyfikator procesu i znacznik czasu, co zapewnia, że ​​identyfikator jest unikalny dla sieci”
Matt Spradley

Możesz mieć racje. Jest to pragmatyczny jeden liniowiec i prawdopodobnie nie jest tak kuloodporny jak CFUUID. Każdy, kto potrzebuje większej dyscypliny, powinien przejść do CoreFoundation.
Ryan McCuaig


7

Przesłałem tutaj moją prostą, ale szybką implementację klasy Guid dla ObjC: GUID obj-c

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

Może parsować do iz różnych formatów łańcuchów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.