Comment créer un GUID / UUID à l'aide d'iOS


207

Je veux pouvoir créer un GUID / UUID sur l'iPhone et l'iPad.

L'intention est de pouvoir créer des clés pour des données distribuées qui sont toutes uniques. Existe-t-il un moyen de le faire avec le SDK iOS?


3
Il y a un article sur la façon de vous assurer de ne jamais perdre cet UUID généré, même pour iOS 5 et versions ultérieures à l'aide de KeyChain. blog.onliquid.com/…
jasoares

Réponses:


323
[[UIDevice currentDevice] uniqueIdentifier]

Renvoie l'ID unique de votre iPhone.

EDIT: -[UIDevice uniqueIdentifier]est désormais obsolète et les applications sont rejetées de l'App Store pour son utilisation. La méthode ci-dessous est désormais l'approche privilégiée.

Si vous devez créer plusieurs UUID, utilisez simplement cette méthode (avec ARC):

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

EDIT: 29 janvier 2014: si vous ciblez iOS 6 ou une version ultérieure, vous pouvez désormais utiliser la méthode beaucoup plus simple:

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

21
[[UIDevice currentDevice] uniqueIdentifier] est obsolète depuis iOS 5, et Apple rejette désormais les applications qui l'utilisent (depuis mars 2012). Le reste de la réponse est toujours précis.
Gorm

13
Après avoir été autour de cette question pendant un certain temps, je suis presque sûr que la question d'origine ne portait pas sur l'identifiant unique de l'appareil, mais sur l'obtention d'un identifiant unique général utile pour quelque chose.
Ryan McCuaig

12
Pour rendre cet ARC compatible, vous devez convertir l'objet chaîne et supprimer l'appel à libération automatique. En d'autres termes, ajoutez le transtypage: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
Depuis iOS 6, vous pouvez utiliser: NSString * UUID = [[NSUUID UUID] UUIDString];
symétrique

1
Si j'utilise [[NSUUID UUID] UUIDString]; dans iOS7 et supérieur, mon application ne sera-t-elle pas rejetée par Apple?
Whoami

100

Voici le code simple que j'utilise, conforme à ARC.

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

    return uuidString;
}

35
Honnêtement, cela devrait être la réponse acceptée, la question d'origine demandée pour un générateur GUID ou UUID, et tout le monde a répondu comment obtenir l'UDID du téléphone. Un identificateur universel unique (UUID) et un identifiant unique de périphérique (UDID) ne sont pas la même chose.
Joe

1
voici une ligne droite NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

Dans iOS 6, vous pouvez facilement utiliser:

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

Plus de détails dans les documentations d'Apple


5
C'est de loin la solution la plus simple. Si vous n'avez pas à prendre en charge avant iOS 6, utilisez-le. J'utilisais des identifiants permanents générés par les données de base, mais c'est beaucoup mieux. +1
Sean

Parfait, merci pour ça! Ceci est ma réponse +1 pour la journée :)
justinhartman

Cela change à chaque fois que je lance l'application dans le simulateur.
Gajendra K Chauhan

46

En examinant la documentation Apple Developer, j'ai trouvé que l' objet CFUUID est disponible sur l'iPhone OS 2.0 et versions ultérieures.


23

Dans Swift :

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

22

La technique la plus simple est d'utiliser NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Voir la référence de classe NSProcessInfo .


8
Cela renvoie un identifiant unique pour le processus. Il n'a aucune ressemblance avec un GUID. D'après les documents: "L'ID comprend le nom d'hôte, l'ID de processus et un horodatage, ce qui garantit que l'ID est unique pour le réseau"
Matt Spradley

Tu pourrais avoir raison. C'est une doublure pragmatique, et n'est probablement pas aussi à l'épreuve des balles que CFUUID. Quiconque a besoin d'une plus grande rigueur doit se rendre à CoreFoundation.
Ryan McCuaig


7

J'ai téléchargé mon implémentation simple mais rapide d'une classe Guid pour ObjC ici: obj-c GUID

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

Il peut également analyser différents formats de chaîne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.