Cómo crear un GUID / UUID usando iOS


207

Quiero poder crear un GUID / UUID en el iPhone y iPad.

La intención es poder crear claves para datos distribuidos que sean únicos. ¿Hay alguna manera de hacer esto con el SDK de iOS?


3
Hay un artículo sobre cómo asegurarse de que nunca pierda el UUID generado, incluso para iOS 5 y posteriores con KeyChain. blog.onliquid.com/…
jasoares

Respuestas:


323
[[UIDevice currentDevice] uniqueIdentifier]

Devuelve la ID única de tu iPhone.

EDITAR: -[UIDevice uniqueIdentifier]ahora está en desuso y las aplicaciones están siendo rechazadas de la App Store por usarlo. El siguiente método es ahora el enfoque preferido.

Si necesita crear varios UUID, simplemente use este método (con ARC):

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

EDITAR: 29 de enero de 2014: si está apuntando a iOS 6 o posterior, ahora puede usar el método mucho más simple:

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

21
[[UIDevice currentDevice] uniqueIdentifier] ha quedado en desuso a partir de iOS 5, y Apple ahora rechaza las aplicaciones que lo usan (a partir de marzo de 2012). El resto de la respuesta sigue siendo precisa.
Gorm

13
Después de haber abordado esta pregunta durante un tiempo, estoy bastante seguro de que la pregunta original no se refería al identificador único del dispositivo, sino a obtener un identificador único general útil para algo.
Ryan McCuaig

12
Para que este ARC sea compatible, debe emitir el objeto de cadena y eliminar la llamada de liberación automática. En otras palabras, agregue el reparto: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
A partir de iOS 6 puede usar: NSString * UUID = [[NSUUID UUID] UUIDString];
Simétrico

1
Si uso [[NSUUID UUID] UUIDString]; en iOS7 y superior, ¿Apple no rechazará mi aplicación?
Whoami

100

Aquí está el código simple que estoy usando, compatible con ARC.

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

    return uuidString;
}

35
Honestamente, esta debería ser la respuesta aceptada, la pregunta original pedía un generador de GUID o UUID, y todos respondieron con cómo obtener el UDID del teléfono. Un identificador único universal (UUID) y un identificador único de dispositivo (UDID) no son lo mismo.
Joe

1
aquí hay una línea recta NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

En iOS 6 puedes usar fácilmente:

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

Más detalles en las Documentaciones de Apple


55
Esta es, con mucho, la solución más simple. Si no tiene que soportar antes de iOS 6, use esto. Estaba usando ID permanentes generados por datos centrales, pero esto es mucho mejor. +1
Sean

Perfecto, gracias por esto! Esta es mi respuesta +1 para el día :)
justinhartman

Cambia cada vez que ejecuto la aplicación en el simulador.
Gajendra K Chauhan

46

Al revisar la documentación del desarrollador de Apple, encontré que el objeto CFUUID está disponible en el iPhone OS 2.0 y posterior.


23

En Swift :

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

22

La técnica más simple es usar NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Consulte la referencia de clase NSProcessInfo .


8
Eso devuelve un identificador único para el proceso. No tiene semejanza con un GUID. De los documentos: "La identificación incluye el nombre de host, la identificación del proceso y una marca de tiempo, lo que garantiza que la identificación sea única para la red"
Matt Spradley,

Podrías estar en lo cierto. Es una línea pragmática, y probablemente no sea tan resistente a las balas como CFUUID. Cualquiera que necesite el mayor rigor debería ir a CoreFoundation.
Ryan McCuaig


7

He subido mi implementación simple pero rápida de una clase Guid para ObjC aquí: obj-c GUID

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

También puede analizar hacia y desde varios formatos de cadena.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.