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

207

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

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

rustyshelf
источник
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 и более поздних версиях.

Henk
источник
23

В Свифте :

var uuid: String = NSUUID().UUIDString
println("uuid: \(uuid)")
Король-Мастер
источник
22

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

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

В Swift 3.0

var uuid = UUID().uuidString
Раду Дикэ
источник
7

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

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

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

tumtumtum
источник