So erstellen Sie eine GUID / UUID mit iOS


207

Ich möchte eine GUID / UUID auf dem iPhone und iPad erstellen können.

Ziel ist es, Schlüssel für verteilte Daten erstellen zu können, die alle eindeutig sind. Gibt es eine Möglichkeit, dies mit dem iOS SDK zu tun?


3
Es gibt einen Artikel darüber, wie Sie sicherstellen können, dass Sie diese generierte UUID auch für iOS 5 und höher mit KeyChain nie verlieren. blog.onliquid.com/…
jasoares

Antworten:


323
[[UIDevice currentDevice] uniqueIdentifier]

Gibt die eindeutige ID Ihres iPhones zurück.

BEARBEITEN: -[UIDevice uniqueIdentifier]ist jetzt veraltet und Apps werden aus dem App Store für die Verwendung abgelehnt. Die folgende Methode ist nun der bevorzugte Ansatz.

Wenn Sie mehrere UUIDs erstellen müssen, verwenden Sie einfach diese Methode (mit ARC):

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

BEARBEITEN: 29. Januar 2014: Wenn Sie auf iOS 6 oder höher abzielen, können Sie jetzt die viel einfachere Methode verwenden:

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

21
[[UIDevice currentDevice] uniqueIdentifier] ist ab iOS 5 veraltet, und Apple lehnt jetzt Apps ab, die es verwenden (Stand März 2012). Der Rest der Antwort ist immer noch korrekt.
Gorm

13
Nachdem ich mich eine Weile mit dieser Frage befasst habe, bin ich mir ziemlich sicher, dass es bei der ursprünglichen Frage nicht um die eindeutige Kennung des Geräts ging, sondern nur darum, eine nützliche allgemeine eindeutige Kennung für etwas zu erhalten.
Ryan McCuaig

12
Um diese ARC-Kompatibilität zu gewährleisten, müssen Sie das Zeichenfolgenobjekt umwandeln und den Autorelease-Aufruf entfernen. Mit anderen Worten, fügen Sie die Besetzung hinzu: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
Ab iOS 6 können Sie Folgendes verwenden: NSString * UUID = [[NSUUID UUID] UUIDString];
Symmetrisch

1
Wenn ich [[NSUUID UUID] UUIDString] benutze; Wird meine App in iOS7 und höher nicht von Apple abgelehnt?
Whoami

100

Hier ist der einfache Code, den ich verwende und der mit ARC kompatibel ist.

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

    return uuidString;
}

35
Ehrlich gesagt sollte dies die akzeptierte Antwort sein, die ursprüngliche Frage, die nach einer GUID oder einem UUID-Generator gestellt wurde, und jeder antwortete, wie man die UDID des Telefons erhält. Eine universell eindeutige Kennung (UUID) und eine eindeutige Gerätekennung (UDID) sind nicht dasselbe.
Joe

1
hier ist eine gerade Linie eins NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

In iOS 6 können Sie einfach verwenden:

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

Weitere Details finden Sie in den Apple-Dokumentationen


5
Dies ist bei weitem die einfachste Lösung. Wenn Sie vor iOS 6 keine Unterstützung benötigen, verwenden Sie diese Option. Ich habe mit Kerndaten generierte permanente IDs verwendet, aber das ist viel besser. +1
Sean

Perfekt, danke dafür! Dies ist meine +1 Antwort für den Tag :)
Justinhartman

Es ändert sich jedes Mal, wenn ich eine App im Simulator starte.
Gajendra K Chauhan

46

Beim Überprüfen der Apple Developer-Dokumentation stellte ich fest, dass das CFUUID- Objekt auf dem iPhone OS 2.0 und höher verfügbar ist.



22

Die einfachste Technik ist zu verwenden NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Siehe die NSProcessInfo- Klassenreferenz.


8
Dies gibt eine eindeutige Kennung für den Prozess zurück. Es hat keine Ähnlichkeit mit einer GUID. Aus den Dokumenten: "Die ID enthält den Hostnamen, die Prozess-ID und einen Zeitstempel, der sicherstellt, dass die ID für das Netzwerk eindeutig ist"
Matt Spradley

Da könntest du recht haben. Es ist ein pragmatischer Einzeiler und wahrscheinlich nicht so kugelsicher wie CFUUID. Jeder, der die größere Genauigkeit benötigt, sollte sich an CoreFoundation wenden.
Ryan McCuaig


7

Ich habe meine einfache, aber schnelle Implementierung einer Guid-Klasse für ObjC hier hochgeladen : obj-c GUID

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

Es kann auch zu und von verschiedenen Zeichenfolgenformaten analysiert werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.