Як створити 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.