Как создать GUID / UUID с помощью iOS


207

Я хочу иметь возможность создавать GUID / UUID на iPhone и iPad.

Цель состоит в том, чтобы иметь возможность создавать ключи для распределенных данных, которые являются уникальными. Есть ли способ сделать это с помощью iOS SDK?


3
Есть статья о том, как гарантировать, что вы никогда не потеряете сгенерированный UUID, даже для iOS 5 и более поздних версий, используя KeyChain. blog.onliquid.com/…
jasoares

Ответы:


323
[[UIDevice currentDevice] uniqueIdentifier]

Возвращает уникальный идентификатор вашего iPhone.

РЕДАКТИРОВАТЬ: -[UIDevice uniqueIdentifier]теперь устарела и приложения отклоняются из App Store для его использования. Метод ниже является сейчас предпочтительным подходом.

Если вам нужно создать несколько UUID, просто используйте этот метод (с ARC):

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

РЕДАКТИРОВАТЬ: 29 января 2014: Если вы ориентируетесь на iOS 6 или более позднюю версию, теперь вы можете использовать гораздо более простой метод:

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

21
[[UIDevice currentDevice] uniqueIdentifier] устарела с iOS 5, и теперь Apple отклоняет приложения, которые его используют (по состоянию на март 2012 года). Остальная часть ответа все еще точна.
Горм

13
Обдумывая этот вопрос некоторое время, я почти уверен, что оригинальный вопрос был не об уникальном идентификаторе устройства, а о том, чтобы просто получить полезный общий уникальный идентификатор для чего-либо.
Райан МакКуайг

12
Чтобы сделать это ARC-совместимым, вы должны привести строковый объект и удалить вызов autorelease. Другими словами, добавьте приведение: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Поль де Ланж,

65
Начиная с iOS 6 вы можете использовать: NSString * UUID = [[NSUUID UUID] UUIDString];
Симметричный

1
Если я использую [[NSUUID UUID] UUIDString]; в iOS7 и выше, не будет ли мое приложение отклонено Apple?
Whoami

100

Вот простой код, который я использую, совместимый с ARC.

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

    return uuidString;
}

35
Честно говоря, это должен быть принятый ответ, первоначальный вопрос, заданный для генератора GUID или UUID, и каждый ответил, как получить UDID телефона. Универсальный уникальный идентификатор (UUID) и Уникальный идентификатор устройства (UDID) - это не одно и то же.
Джо

1
здесь прямая линия NSString * UUID = [[NSUUID UUID] UUIDString];
Адел

89

В iOS 6 вы можете легко использовать:

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

Более подробная информация в документации Apple


5
Это, безусловно, самое простое решение. Если вам не нужна поддержка до iOS 6, используйте это. Я использовал основные данные, сгенерированные постоянные идентификаторы, но это намного лучше. +1
Шон

Отлично, спасибо за это! Это мой +1 ответ за день :)
justinhartman

Он меняется каждый раз, когда я запускаю приложение в симуляторе.
Гаджендра К Чаухан

46

Просматривая документацию Apple Developer, я обнаружил, что объект CFUUID доступен в iPhone OS 2.0 и более поздних версиях.



22

Самая простая техника заключается в использовании NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. См. Ссылку на класс NSProcessInfo .


8
Это возвращает уникальный идентификатор для процесса. Это не имеет никакого сходства с GUID. Из документов: «Идентификатор включает в себя имя хоста, идентификатор процесса и метку времени, что обеспечивает уникальность идентификатора для сети»
Мэтт Спрэдли,

Возможно, ты прав. Это прагматичный однострочник, и, вероятно, не такой пуленепробиваемый, как CFUUID. Любой, кому нужна большая строгость, должен перейти на CoreFoundation.
Райан МакКуайг


7

Я загрузил мою простую, но быструю реализацию класса Guid для ObjC здесь: GUID obj-c

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

Он также может анализировать различные форматы строк.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.