Как создать 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.