İOS kullanarak bir GUID / UUID oluşturma


207

İPhone ve iPad'de bir GUID / UUID oluşturabilmek istiyorum.

Amaç, benzersiz olan dağıtılmış veriler için anahtarlar oluşturmaktır. Bunu iOS SDK ile yapmanın bir yolu var mı?


3
KeyChain'i kullanarak iOS 5 ve sonraki sürümler için bile, oluşturulan UUID'yi asla kaybetmemenizle ilgili bir makale var. blog.onliquid.com/…
jasoares

Yanıtlar:


323
[[UIDevice currentDevice] uniqueIdentifier]

İPhone'unuzun Benzersiz Kimliğini döndürür.

DÜZENLE: -[UIDevice uniqueIdentifier]artık kullanımdan kaldırıldı ve uygulamalar App Store'dan kullanım için reddediliyor. Aşağıdaki yöntem şimdi tercih edilen yaklaşımdır.

Birkaç UUID oluşturmanız gerekirse, bu yöntemi kullanın (ARC ile):

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

EDIT: 29 Ocak 2014: iOS 6 veya üstünü hedefliyorsanız, artık çok daha basit bir yöntem kullanabilirsiniz:

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

21
[[UIDevice currentDevice] uniqueIdentifier], iOS 5'ten itibaren kullanımdan kaldırıldı ve Apple şimdi onu kullanan uygulamaları reddediyor (Mart 2012 itibariyle). Yanıtın geri kalanı hala doğrudur.
Gorm

13
Bir süredir bu sorunun etrafında bulunduğumdan eminim, orijinal soru cihazın benzersiz tanımlayıcısıyla ilgili değil, sadece bir şey için yararlı bir genel benzersiz tanımlayıcı almakla ilgili.
Ryan McCuaig

12
Bu ARC uyumlu hale getirmek için, string nesnesini yayınlamalı ve otomatik serbest bırakma çağrısını kaldırmalısınız. Başka bir deyişle, cast ekleyin: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

65
İOS 6'dan itibaren şunları kullanabilirsiniz: NSString * UUID = [[NSUUID UUID] UUIDString];
Simetrik

1
[[NSUUID UUID] UUIDString] kullanırsam; iOS7 ve sonraki sürümlerde, uygulamam Apple tarafından reddedilmeyecek mi?
Whoami

100

İşte ARC ile uyumlu, kullandığım basit kod.

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

    return uuidString;
}

35
Dürüst olmak gerekirse, bu kabul edilen cevap olmalı, orijinal soru bir GUID veya UUID jeneratörü istedi ve herkes telefonun UDID'sini nasıl alacağına cevap verdi. Evrensel Benzersiz Tanımlayıcı (UUID) ve Benzersiz Cihaz Tanımlayıcı (UDID) aynı şey değildir.
Joe

1
düz bir çizgi burada NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

İOS 6'da şunları kullanabilirsiniz:

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

Apple'ın Dokümantasyonunda daha fazla ayrıntı


5
Bu açık ara en basit çözüm. İOS 6'dan önce desteklemeniz gerekmiyorsa bunu kullanın. Kalıcı kimlikler oluşturulan temel verileri kullanıyordum, ama bu çok daha iyi. +1
Sean

Mükemmel, bunun için teşekkürler! Bu gün için +1 cevabım :)
justinhartman

Simülatörde uygulamayı her çalıştırdığımda değişiyor.
Gajendra K Chauhan



22

En basit teknik kullanmaktır NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. NSProcessInfo sınıfı referansına bakın .


8
Bu işlem için benzersiz bir tanımlayıcı döndürür. Bir GUID ile hiçbir ilgisi yoktur. Dokümanlardan: "Kimlik, ana bilgisayar adını, işlem kimliğini ve kimliğin ağ için benzersiz olmasını sağlayan bir zaman damgasını içerir"
Matt Spradley

Haklı olabilirsin. Bu pragmatik bir astar ve muhtemelen CFUUID kadar kurşun geçirmez değil. Büyük titizliğe ihtiyaç duyan herkes CoreFoundation'a düşmelidir.
Ryan McCuaig


7

ObjC için bir Guid sınıfının basit ama hızlı uygulamasını burada yükledim: obj-c GUID

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

Çeşitli dize formatlarına da ayrışabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.