Як створити GUID / UUID за допомогою iOS


207

Я хочу мати можливість створити GUID / UUID на iPhone та iPad.

Наміром є можливість створити ключі для розподілених даних, які є унікальними. Чи можна це зробити за допомогою iOS SDK?


3
Існує стаття про те, як переконатися, що ви ніколи не втратите створений UUID, навіть для iOS 5 та пізніших версій за допомогою KeyChain. blog.onliquid.com/…
— jasoares

Відповіді:


323
[[UIDevice currentDevice] uniqueIdentifier]

Повертає унікальний ідентифікатор вашого iPhone.

EDIT: -[UIDevice uniqueIdentifier]тепер застаріло, а додатки відмовляються від App Store за його використання. Нижче наведений спосіб є кращим підходом.

Якщо вам потрібно створити кілька UUID, просто використовуйте цей метод (за допомогою ARC):

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

EDIT: 29 січня 2014 року. Якщо ви орієнтуєтесь на iOS 6 або новішу версію, тепер ви можете використовувати набагато простіший метод:

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

21
[[UIDevice currentDevice] унікальний ідентифікатор] був знятий з iOS 5, і Apple зараз відкидає програми, які його використовують (станом на березень 2012 року). Решта відповідей досі точна.
— Горм

13
Деякий час займався цим питанням, я майже впевнений, що оригінальне запитання стосувалося не унікального ідентифікатора пристрою, а просто отримання корисного загального унікального ідентифікатора для чогось.
— Райан МакКвайг

12
Щоб зробити цей ARC сумісним, вам слід віддати об'єкт рядка та видалити виклик автоматичної випуску. Іншими словами, додайте команду: 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
— Sean

Ідеально, дякую за це! Це моя відповідь +1 за день :)
— justinhartman

Це змінюється щоразу, коли я запускаю додаток у тренажері.
— Gajendra K Chauhan

46

Переглядаючи документацію Apple Developer, я виявив, що об'єкт CFUUID доступний на iPhone OS 2.0 та пізніших версіях.



22

Найпростіша техніка - використання NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Дивіться посилання на клас NSProcessInfo .


8
Це повертає унікальний ідентифікатор процесу. Він не має подібності до GUID. З документів: "Ідентифікатор містить ім'я хоста, ідентифікатор процесу та часову позначку, яка гарантує, що ідентифікатор є унікальним для мережі"
— Matt Spradley

Ви можете мати рацію. Це прагматичний однолінійний набір, і, ймовірно, не такий бронезахисний, як CFUUID. Кожен, хто потребує більшої суворості, повинен перейти до CoreFoundation.
— Райан МакКуайг


7

Сюди я завантажив просту, але швидку реалізацію класу Guid для ObjC: obj-c GUID

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

Він також може аналізувати різні та рядкові формати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.