Come creare un GUID / UUID usando iOS


207

Voglio essere in grado di creare un GUID / UUID su iPhone e iPad.

L'intenzione è quella di essere in grado di creare chiavi per i dati distribuiti che sono tutti unici. C'è un modo per farlo con l'SDK di iOS?


3
C'è un articolo su come assicurarti di non perdere mai l'UUID generato, anche per iOS 5 e versioni successive utilizzando KeyChain. blog.onliquid.com/…
jasoares,

Risposte:


323
[[UIDevice currentDevice] uniqueIdentifier]

Restituisce l'ID univoco del tuo iPhone.

EDIT: -[UIDevice uniqueIdentifier]ora è deprecato e le app vengono rifiutate dall'App Store per l'utilizzo. Il metodo seguente è ora l'approccio preferito.

Se devi creare più UUID, usa questo metodo (con ARC):

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

MODIFICA: 29 gennaio 2014: se scegli come target iOS 6 o versioni successive, ora puoi utilizzare il metodo molto più semplice:

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

21
[[UIDevice currentDevice] uniqueIdentifier] è stato deprecato a partire da iOS 5 e Apple sta ora rifiutando le app che lo utilizzano (da marzo 2012). Il resto della risposta è ancora accurato.
Gorm

13
Essendo stato su questa domanda per un po ', sono abbastanza sicuro che la domanda originale non riguardasse l'identificatore univoco del dispositivo, ma solo per ottenere un utile identificatore univoco generale per qualcosa.
Ryan McCuaig,

12
Per rendere questo ARC conforme è necessario eseguire il cast dell'oggetto stringa e rimuovere la chiamata di rilascio automatico. In altre parole aggiungi il cast: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange,

65
A partire da iOS 6 puoi usare: NSString * UUID = [[NSUUID UUID] UUIDString];
Simmetrico

1
Se utilizzo [[NSUUID UUID] UUIDString]; in iOS7 e versioni successive, la mia app non verrà rifiutata da Apple?
Whoami,

100

Ecco il semplice codice che sto usando, conforme ad ARC.

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

    return uuidString;
}

35
Onestamente questa dovrebbe essere la risposta accettata, la domanda originale posta per un GUID o un generatore UUID, e tutti hanno risposto con come ottenere l'UDID del telefono. Un identificatore univoco universale (UUID) e un identificatore univoco del dispositivo (UDID) non sono la stessa cosa.
Joe

1
ecco una linea retta una NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

In iOS 6 puoi facilmente usare:

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

Maggiori dettagli nella documentazione di Apple


5
Questa è di gran lunga la soluzione più semplice. Se non è necessario supportare prima di iOS 6, utilizzare questo. Stavo usando ID permanenti generati da dati core, ma questo è molto meglio. +1
Sean,

Perfetto, grazie per questo! Questa è la mia risposta +1 per il giorno :)
justinhartman il

Cambia ogni volta che eseguo un'app nel simulatore.
Gajendra K Chauhan,

46

Esaminando la documentazione per gli sviluppatori Apple, ho scoperto che l' oggetto CFUUID è disponibile su iPhone OS 2.0 e versioni successive.


23

In Swift :

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

22

La tecnica più semplice è usare NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Vedere il riferimento alla classe NSProcessInfo .


8
Ciò restituisce un identificatore univoco per il processo. Non ha alcuna somiglianza con un GUID. Dai documenti: "L'ID include il nome host, l'ID processo e un timestamp, che garantisce che l'ID sia univoco per la rete"
Matt Spradley,

Potresti avere ragione. È un pragmatico one-liner e probabilmente non è a prova di proiettile come CFUUID. Chiunque abbia bisogno del maggior rigore dovrebbe abbandonare CoreFoundation.
Ryan McCuaig,


7

Ho caricato la mia semplice ma veloce implementazione di una classe Guid per ObjC qui: obj-c GUID

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

Può anche analizzare da e verso vari formati di stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.