Quiero ser capaz de crear un GUID/UUID en el iPhone y el iPad.

La intención es ser capaz de crear claves para datos distribuidos que son únicas. Es allí una manera de hacer esto con el SDK de iOS?

  • Hay un artículo acerca de cómo asegurarse de que nunca se pierda ese UUID genera, incluso para iOS 5 y más tarde con el Llavero. blog.onliquid.com/…
InformationsquelleAutor rustyshelf | 2009-01-09

8 Comentarios

  1. 323
    [[UIDevice currentDevice] uniqueIdentifier]

    Devuelve el IDENTIFICADOR Único de tu iPhone.

    EDICIÓN: -[UIDevice uniqueIdentifier] ahora es obsoleto y las aplicaciones son rechazadas desde la App Store para su uso. El método siguiente es ahora el método preferido.

    Si necesita crear varios UUID, sólo tiene que utilizar este método (con ARCO):

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

    EDICIÓN: Enero 29 de 2014:
    Si usted está apuntando a iOS 6 o posterior, puede utilizar el método mucho más sencillo:

    NSString *UUID = [[NSUUID UUID] UUIDString];
    • [[UIDevice currentDevice] uniqueIdentifier] ha dejado de utilizarse a partir de iOS 5, Apple y ahora está rechazando las aplicaciones que la utilizan (a partir de Marzo de 2012). El resto de la respuesta es la correcta.
    • De haber sido alrededor de esta cuestión por un tiempo, estoy bastante seguro de que la pregunta original no era sobre el identificador único del dispositivo, pero se trata sólo de conseguir un útil de tipo general identificador único para algo.
    • Para hacer este ARCO compatible debe convertir el objeto string y quitar el grupo de liberación automática de llamadas. En otras palabras, añadir el elenco: NSString* * cadena = (__puente_transferencia NSString*)CFUUIDCreateString(NULL, theUUID);
    • Como de iOS 6 puede utilizar: NSString *UUID = [[NSUUID UUID] UUIDString];
    • Es la auto-liberación necesaria? Xcode queja de que cuando ejecuto «Analizar», eso es todo. Se dice que «el Objeto con un +0 retener el número devuelto a la llamada donde un +1 (poseer) retener el recuento se espera»|
    • La respuesta correcta para iOS5 y 6 con XCode 4 o posterior nanshi del getUUID aplicación.
    • Si yo uso [[NSUUID UUID] UUIDString]; en iOS7 y, encima, no mi app rechazada por Apple?
    • Alguna idea de cómo utilizarlo en swift?
    • iOS9: NSString *UUID = [[NSUUID UUID] UUIDString] UUID siempre resultados en la ‘nil’ ¿por qué es esto?
    • Yo sólo lo utiliza en iOS 8 + 9 app y funciona muy bien. Incluso me re-probado para usted hace un minuto 🙂
    • No Apple no rechazar su aplicación, porque de esto. Que el código sólo genera un identificador único y nada más (y un identificador único cada vez que lo llaman). No es el único del dispositivo de identificación.
    • Xcode informes potencial de fugas con el primer ejemplo, y sugiere el uso de CFBridgingRelease: CFUUIDRef UUID = CFUUIDCreate(NULL); CFStringRef stringUUID = CFUUIDCreateString(NULL, UUID); CFRelease(UUID); return (NSString *)CFBridgingRelease(stringUUID);

  2. 100

    Aquí, es el código que estoy utilizando, compatible con ARC.

    +(NSString *)getUUID
    {
        CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
        NSString * uuidString = (__bridge_transfer NSString*)CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
        CFRelease(newUniqueId);
    
        return uuidString;
    }
    • Honestamente, este debe ser aceptado respuesta, a la pregunta original, pidió un GUID o UUID del generador, y todos respondieron con cómo obtener el teléfono de la CIUD. Un Identificador Único Universal (UUID) y el Identificador de Dispositivo Único (UDID) no son la misma cosa.
    • aquí es una línea recta, una NSString *UUID = [[NSUUID UUID] UUIDString];
  3. 88

    En iOS 6, usted puede utilizar fácilmente:

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

    Más detalles en Apple Documentaciones

    • Este es por lejos la solución más simple. Si usted no tiene el apoyo antes de iOS 6, el uso de este. Yo estaba usando los datos de los núcleos generados permanente IDs, pero esto es mucho mejor. +1
    • Perfecto, gracias por esto! Este es mi +1 respuesta para el día 🙂
    • Se cambian cada vez que ejecute la aplicación en el simulador.
  4. 46

    La revisión de la documentación para Desarrolladores de Apple he encontrado el CFUUID objeto está disponible en el iPhone OS 2.0 y posteriores.

  5. 22

    La técnica más sencilla es utilizar NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Ver el NSProcessInfo de referencia de la clase.

    • Que devuelve un identificador único para el proceso. No tiene ningún parecido con un GUID. A partir de la documentación: «La IDENTIFICACIÓN incluye el nombre de host, el proceso de IDENTIFICACIÓN, y un sello de tiempo, lo que garantiza que el ID es único para la red»
    • Usted podría estar en lo correcto. Es un pragmático-liner, y probablemente no es tan infalible como CFUUID. Cualquier persona que necesite el mayor rigor debería bajar a CoreFoundation.
  6. 7

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

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

    Puede analizar y a partir de varios formatos de cadena así.

Dejar respuesta

Please enter your comment!
Please enter your name here