ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 iOS 创建 GUID/UUID

我希望能够在 iPhone 和 iPad 上创建 GUID/UUID。

目的是能够为分布式数据创建唯一的密钥。有没有办法用 iOS SDK 做到这一点?

有一篇关于如何确保您永远不会丢失生成的 UUID 的文章,即使对于 iOS 5 及更高版本使用 KeyChain 也是如此。 blog.onliquid.com/…

O
Olie
[[UIDevice currentDevice] uniqueIdentifier]

返回 iPhone 的唯一 ID。

编辑:-[UIDevice uniqueIdentifier] 现在已弃用,应用程序被 App Store 拒绝使用它。下面的方法现在是首选方法。

如果您需要创建多个 UUID,只需使用此方法(使用 ARC):

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

编辑:2014 年 1 月 29 日:如果您的目标是 iOS 6 或更高版本,您现在可以使用更简单的方法:

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

[[UIDevice currentDevice] uniqueIdentifier] 自 iOS 5 起已被弃用,Apple 现在拒绝使用它的应用程序(截至 2012 年 3 月)。其余的响应仍然是准确的。
围绕这个问题已经有一段时间了,我很确定最初的问题不是关于设备的唯一标识符,而是关于获得一个有用的通用唯一标识符。
要使此 ARC 兼容,您必须强制转换字符串对象并删除自动释放调用。换句话说,添加演员表: NSString* string = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, theUUID);
从 iOS 6 开始,您可以使用: NSString *UUID = [[NSUUID UUID] UUIDString];
如果我使用 [[NSUUID UUID] UUIDString];在iOS7及更高版本中,我的应用程序不会被Apple拒绝吗?
t
trillions

这是我正在使用的简单代码,符合 ARC。

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

    return uuidString;
}

老实说,这应该是公认的答案,最初的问题要求 GUID 或 UUID 生成器,每个人都回答如何获取手机的 UDID。通用唯一标识符 (UUID) 和唯一设备标识符 (UDID) 不是一回事。
这里是一条直线 NSString *UUID = [[NSUUID UUID] UUIDString];
A
Arian Sharifian

在 iOS 6 中,您可以轻松使用:

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

Apple's Documentations 中的更多详细信息


这是迄今为止最简单的解决方案。如果您在 iOS 6 之前不需要支持,请使用此。我使用的是核心数据生成的永久 ID,但这要好得多。 +1
完美,谢谢你!这是我当天的 +1 答案:)
每次我在模拟器中运行应用程序时它都会改变。
B
Bill the Lizard

查看 Apple Developer 文档,我发现 CFUUID 对象可用于 iPhone OS 2.0 及更高版本。


K
King-Wizard

在斯威夫特:

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

R
Ryan McCuaig

最简单的技术是使用 NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]。请参阅 NSProcessInfo 类参考。


这将返回进程的唯一标识符。它与 GUID 没有任何相似之处。来自文档:“ID 包括主机名、进程 ID 和时间戳,可确保 ID 对于网络是唯一的”
你可能是对的。它是一个实用的单线,可能不像 CFUUID 那样防弹。任何需要更严格的人都应该加入CoreFoundation。
R
Radu Diță

在 Swift 3.0 中

var uuid = UUID().uuidString

N
NANNAV

我已在此处上传了用于 ObjC 的 Guid 类的简单但快速的实现:obj-c GUID

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

它也可以解析各种字符串格式。