2009-01-09 6 views
188

Quiero poder crear un GUID/UUID en el iPhone y el iPad.Cómo crear un GUID/UUID usando el SDK de iPhone

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

+3

Hay un artículo sobre cómo asegurarse de no perder nunca el UUID generado, incluso para iOS 5 y posterior con KeyChain. https://blog.onliquid.com/persistent-device-unique-identifier-ios-keychain/ – jasoares

Respuesta

306
[[UIDevice currentDevice] uniqueIdentifier] 

Devuelve la identificación única de su iPhone.

EDIT: -[UIDevice uniqueIdentifier] ahora está en desuso y las aplicaciones se rechazan de la tienda de aplicaciones para su uso. El método a continuación es ahora el enfoque preferido.

Si es necesario crear varias UUID, sólo tiene que utilizar este método (ARC):

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

EDIT: ene-29 2014: Si usted está apuntando iOS 6 o posterior, puede ahora utilice el método mucho más simple:

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

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

+11

Habiendo estado al tanto de esta pregunta por un tiempo, estoy bastante seguro de que la pregunta original no era sobre el identificador único del dispositivo, sino sobre cómo obtener un identificador único general útil para algo. –

+12

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

44

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

+0

eso es exactamente lo que buscaba, gracias – rustyshelf

22

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

+8

Eso devuelve un identificador único para el proceso. No se parece a un GUID. De los documentos: "El ID incluye el nombre de host, el ID del proceso y un sello de tiempo, lo que garantiza que el ID sea único para la red" –

+0

Puede tener razón. Es un juego de cartas pragmático, y probablemente no sea tan resistente a las balas como CFUUID. Cualquier persona que necesite mayor rigor debería descender a CoreFoundation. –

7

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

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

Se puede analizar desde y hacia diferentes formatos de cadena también.

98

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; 
} 
+34

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

+1

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

82

En iOS 6 puede utilizar simplemente:

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

Más detalles en Apple's Documentations

+5

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

+0

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

+0

Cambia cada vez que ejecuto la aplicación en el simulador. –

19

En Swift:

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

En Swift 3.0

var uuid = UUID().uuidString 
Cuestiones relacionadas