Como criar um GUID / UUID usando o iOS


207

Quero poder criar um GUID / UUID no iPhone e iPad.

A intenção é poder criar chaves para dados distribuídos todos únicos. Existe uma maneira de fazer isso com o SDK do iOS?


3
Há um artigo sobre como garantir que você nunca perca o UUID gerado, mesmo para o iOS 5 e posterior, usando o KeyChain. blog.onliquid.com/…
jasoares 28/05

Respostas:


323
[[UIDevice currentDevice] uniqueIdentifier]

Retorna o ID exclusivo do seu iPhone.

EDIT: -[UIDevice uniqueIdentifier]agora está obsoleto e os aplicativos estão sendo rejeitados da App Store por usá-lo. O método abaixo agora é a abordagem preferida.

Se você precisar criar vários UUID, use este método (com ARC):

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

EDIT: 29 de janeiro de 2014: se você estiver segmentando o iOS 6 ou posterior, agora poderá usar o método muito mais simples:

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

21
O [[UIDevice currentDevice] uniqueIdentifier] foi descontinuado a partir do iOS 5, e a Apple agora está rejeitando aplicativos que o utilizam (em março de 2012). O restante da resposta ainda é preciso.
Gorm 28/03

13
Tendo discutido essa questão há algum tempo, tenho certeza de que a pergunta original não era sobre o identificador exclusivo do dispositivo, mas sobre apenas obter um identificador exclusivo geral útil para algo.
Ryan McCuaig

12
Para tornar esse ARC compatível, você deve converter o objeto string e remover a chamada de liberação automática. Em outras palavras, adicione o elenco: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
No iOS 6, você pode usar: NSString * UUID = [[NSUUID UUID] UUIDString];
Simétrica

1
Se eu usar [[NSUUID UUID] UUIDString]; no iOS7 e superior, meu aplicativo não será rejeitado pela Apple?
Whoami

100

Aqui está o código simples que estou usando, compatível com o ARC.

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

    return uuidString;
}

35
Honestamente, essa deve ser a resposta aceita, a pergunta original solicitou um gerador de GUID ou UUID e todos responderam como obter o UDID do telefone. Um identificador universalmente único (UUID) e um identificador de dispositivo exclusivo (UDID) não são a mesma coisa.
Joe

1
aqui está uma linha reta: NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

No iOS 6, você pode usar facilmente:

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

Mais detalhes em Documentações da Apple


5
Esta é de longe a solução mais simples. Se você não precisar oferecer suporte antes do iOS 6, use isso. Eu estava usando IDs permanentes gerados por dados principais, mas isso é muito melhor. +1
Sean

Perfeito, obrigado por isso! Esta é a minha resposta de +1 para o dia :) #
30613 justinhartman

Ele muda toda vez que executo o aplicativo no simulador.
Gajendra K Chauhan

46

Revendo a documentação do desenvolvedor da Apple, descobri que o objeto CFUUID está disponível no iPhone OS 2.0 e posterior.



22

A técnica mais simples é usar NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Consulte a referência de classe NSProcessInfo .


8
Isso retorna um identificador exclusivo para o processo. Não tem semelhança com um GUID. Dos documentos: "O ID inclui o nome do host, o ID do processo e um registro de data e hora, o que garante que o ID seja exclusivo para a rede"
Matt Spradley

Você pode estar certo. É uma linha pragmática e provavelmente não é tão à prova de balas quanto o CFUUID. Quem precisa de maior rigor deve recorrer ao CoreFoundation.
Ryan McCuaig


7

Fiz upload da minha implementação simples, mas rápida, de uma classe Guid para ObjC aqui: obj-c GUID

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

Ele também pode analisar de e para vários formatos de string.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.