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.