Cara membuat GUID / UUID menggunakan iOS

207

Saya ingin dapat membuat GUID / UUID di iPhone dan iPad.

Tujuannya adalah untuk dapat membuat kunci untuk data terdistribusi yang semuanya unik. Apakah ada cara untuk melakukan ini dengan SDK iOS?

rustyshelf
sumber
3
Ada artikel tentang cara memastikan Anda tidak pernah kehilangan UUID yang dihasilkan, bahkan untuk iOS 5 dan yang lebih baru menggunakan KeyChain. blog.onliquid.com/...
jasoares

Jawaban:

323
[[UIDevice currentDevice] uniqueIdentifier]

Mengembalikan ID Unik iPhone Anda.

EDIT: -[UIDevice uniqueIdentifier]sekarang sudah tidak digunakan lagi dan aplikasi ditolak dari App Store untuk menggunakannya. Metode di bawah ini sekarang merupakan pendekatan yang lebih disukai.

Jika Anda perlu membuat beberapa UUID, cukup gunakan metode ini (dengan ARC):

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

EDIT: Jan, 29 2014: Jika Anda menargetkan iOS 6 atau lebih baru, Anda sekarang dapat menggunakan metode yang lebih sederhana:

NSString *UUID = [[NSUUID UUID] UUIDString];
Stephan Burlot
sumber
21
[[UIDevice currentDevice] uniqueIdentifier] telah ditinggalkan sejak iOS 5, dan Apple sekarang menolak aplikasi yang menggunakannya (per Maret 2012). Sisa responsnya masih akurat.
Gorm
13
Setelah membahas pertanyaan ini untuk sementara waktu, saya cukup yakin pertanyaan awal bukan tentang pengidentifikasi unik perangkat, tetapi tentang hanya mendapatkan pengenal unik umum yang berguna untuk sesuatu.
Ryan McCuaig
12
Untuk membuat ARC ini sesuai, Anda harus melemparkan objek string dan menghapus panggilan autorelease. Dengan kata lain tambahkan para pemain: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange
65
Pada iOS 6 Anda dapat menggunakan: NSString * UUID = [[NSUUID UUID] UUIDString];
Simetris
1
Jika saya menggunakan [[NSUUID UUID] UUIDString]; di iOS7 dan di atasnya, bukankah aplikasi saya akan ditolak oleh Apple?
Whoami
100

Berikut adalah kode sederhana yang saya gunakan, sesuai dengan ARC.

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

    return uuidString;
}
triliunan
sumber
35
Sejujurnya ini harus menjadi jawaban yang diterima, pertanyaan asli meminta generator GUID atau UUID, dan semua orang menjawab dengan cara mendapatkan UDID ponsel. Pengidentifikasi Unik Universal (UUID) dan Pengidentifikasi Perangkat Unik (UDID) bukan hal yang sama.
Joe
1
di sini adalah garis lurus satu NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel
89

Di iOS 6 Anda dapat dengan mudah menggunakan:

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

Lebih detail dalam Dokumentasi Apple

Arian Sharifian
sumber
5
Sejauh ini, ini adalah solusi paling sederhana. Jika Anda tidak harus mendukung sebelum iOS 6, gunakan ini. Saya menggunakan data inti yang menghasilkan ID permanen, tetapi ini jauh lebih baik. +1
Sean
Sempurna, terima kasih untuk ini! Ini adalah jawaban +1 saya untuk hari ini :)
justinhartman
Itu berubah setiap kali saya menjalankan aplikasi di simulator.
Gajendra K Chauhan
46

Meninjau dokumentasi Pengembang Apple, saya menemukan objek CFUUID tersedia di iPhone OS 2.0 dan yang lebih baru.

Henk
sumber
23

Dalam Swift :

var uuid: String = NSUUID().UUIDString
println("uuid: \(uuid)")
Raja-Penyihir
sumber
22

Teknik paling sederhana adalah menggunakan NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. Lihat referensi kelas NSProcessInfo .

Ryan McCuaig
sumber
8
Itu mengembalikan pengidentifikasi unik untuk proses. Tidak memiliki kemiripan dengan GUID. Dari dokumen: "ID mencakup nama host, ID proses, dan cap waktu, yang memastikan bahwa ID tersebut unik untuk jaringan"
Matt Spradley
Anda mungkin benar. Ini adalah linier pragmatis, dan mungkin tidak antipeluru seperti CFUUID. Siapa pun yang membutuhkan kekakuan yang lebih besar harus turun ke CoreFoundation.
Ryan McCuaig
15

Di Swift 3.0

var uuid = UUID().uuidString
Radu Diță
sumber
7

Saya telah mengunggah implementasi sederhana saya dari kelas Guid untuk ObjC di sini: obj-c GUID

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

Itu dapat menguraikan ke dan dari berbagai format string juga.

tumtumtum
sumber