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?


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];

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;
}

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


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.


23

Dalam Swift :

var uuid: String = NSUUID().UUIDString
println("uuid: \(uuid)")

22

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


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.