วิธีสร้าง GUID / UUID โดยใช้ iOS


207

ฉันต้องการสร้าง GUID / UUID บน iPhone และ iPad

ความตั้งใจที่จะสามารถสร้างคีย์สำหรับข้อมูลแบบกระจายที่ไม่ซ้ำกันทั้งหมด มีวิธีทำเช่นนี้กับ iOS SDK หรือไม่?


3
มีบทความเกี่ยวกับวิธีทำให้แน่ใจว่าคุณจะไม่สูญเสีย UUID ที่สร้างขึ้นมาแม้แต่ใน iOS 5 และใหม่กว่าโดยใช้ KeyChain blog.onliquid.com/…
jasoares

คำตอบ:


323
[[UIDevice currentDevice] uniqueIdentifier]

ส่งคืน ID เฉพาะของ iPhone ของคุณ

แก้ไข: -[UIDevice uniqueIdentifier]ขณะนี้เลิกใช้งานแล้วและแอพกำลังถูกปฏิเสธจาก App Store เพื่อใช้งาน วิธีการด้านล่างเป็นวิธีที่ต้องการในขณะนี้

หากคุณต้องการสร้าง UUID หลายอันให้ใช้วิธีนี้ (กับ ARC):

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

แก้ไข: ม.ค. , 29 2014: หากคุณกำหนดเป้าหมายเป็น iOS 6 หรือใหม่กว่าตอนนี้คุณสามารถใช้วิธีที่ง่ายกว่านี้มาก:

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

21
[[UIDevice currentDevice] uniqueIdentifier] เลิกใช้แล้วใน iOS 5 และ Apple กำลังปฏิเสธแอปที่ใช้งาน (ตั้งแต่เดือนมีนาคม 2012) การตอบสนองที่เหลือยังคงแม่นยำ
Gorm

13
เมื่อได้รับคำถามนี้มาระยะหนึ่งแล้วฉันค่อนข้างแน่ใจว่าคำถามเดิมไม่ได้เกี่ยวกับตัวระบุที่ไม่ซ้ำกันของอุปกรณ์
Ryan McCuaig

12
เพื่อให้เป็นไปตาม ARC นี้คุณต้องส่งวัตถุสตริงและลบการโทรอัตโนมัติ กล่าวอีกนัยหนึ่งเพิ่มเพี้ยน: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Paul de Lange

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 ของโทรศัพท์ A Universally Unique Identifier (UUID) และ Unique Device Identifier (UDID) ไม่ใช่สิ่งเดียวกัน
Joe

1
นี่คือเส้นตรงหนึ่ง NSString * UUID = [[NSUUID UUID] UUIDString];
Adeel

89

ใน iOS 6 คุณสามารถใช้:

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

รายละเอียดเพิ่มเติมในเอกสารประกอบของ Apple


5
นี่คือทางออกที่ง่ายที่สุด หากคุณไม่ต้องสนับสนุนก่อนใช้ iOS 6 ให้ใช้สิ่งนี้ ฉันใช้ข้อมูลหลักที่สร้าง ID ถาวร แต่สิ่งนี้ดีกว่ามาก +1
ฌอน

ดีมากขอบคุณสำหรับสิ่งนี้! นี่คือคำตอบของฉัน +1 สำหรับวัน :)
justinhartman

มันเปลี่ยนทุกครั้งที่ฉันรันแอพในเครื่องจำลอง
Gajendra K Chauhan

46

การตรวจสอบเอกสารประกอบสำหรับนักพัฒนา Apple ฉันพบว่าวัตถุCFUUIDนั้นมีอยู่ใน iPhone OS 2.0 และใหม่กว่า



22

NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]เทคนิคที่ง่ายที่สุดคือการใช้งาน ดูการอ้างอิงคลาสNSProcessInfo


8
ที่ส่งคืนตัวบ่งชี้เฉพาะสำหรับกระบวนการ มันไม่มีความคล้ายคลึงกับ GUID จากเอกสาร: "ID รวมถึงชื่อโฮสต์, ID กระบวนการและการประทับเวลาซึ่งทำให้มั่นใจได้ว่า ID นั้นไม่ซ้ำกันสำหรับเครือข่าย"
Matt Spradley

คุณอาจจะถูกต้อง มันเป็นสายการบินที่ใช้งานได้จริงและอาจไม่กันกระสุนเท่า CFUUID ใครก็ตามที่ต้องการความแม่นยำมากกว่านี้ควรลงไปที่ CoreFoundation
Ryan McCuaig


7

ฉันได้อัปโหลดคลาส Guid ที่ง่ายและรวดเร็วสำหรับ ObjC ที่นี่: obj-c GUID

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

มันสามารถแยกไปและกลับจากรูปแบบสตริงที่หลากหลายเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.