iOS를 사용하여 GUID / UUID를 만드는 방법


207

iPhone 및 iPad에서 GUID / UUID를 만들 수 있기를 원합니다.

의도는 모두 고유 한 분산 데이터에 대한 키를 작성할 수 있도록하는 것입니다. iOS SDK로 이것을 수행하는 방법이 있습니까?


3
KeyChain을 사용하는 iOS 5 이상에서도 생성 된 UUID를 잃어 버리지 않도록하는 방법에 대한 기사가 있습니다. blog.onliquid.com/…
— jasoares

답변:


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

21
[[UIDevice currentDevice] uniqueIdentifier]는 iOS 5부터 더 이상 사용되지 않으며 Apple은 현재이를 사용하는 앱을 거부하고 있습니다 (2012 년 3 월 기준). 나머지 응답은 여전히 ​​정확합니다.
— 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를 얻는 방법에 응답했습니다. UUID (Universally Unique Identifier)와 UDID (Unique Device Identifier)는 동일하지 않습니다.
— 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
— Sean

완벽 해, 고마워! 이 : 오늘 내 한 대답이다
— justinhartman

시뮬레이터에서 앱을 실행할 때마다 변경됩니다.
— Gajendra K Chauhan

46

Apple Developer 문서를 검토 한 결과 CFUUID 객체가 iPhone OS 2.0 이상에서 사용 가능 하다는 것을 알았 습니다.


23

에서 스위프트 :

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

22

가장 간단한 기술은 사용하는 것 NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]입니다. 참고 항목 NSProcessInfo의 클래스 참조하십시오.


8
프로세스의 고유 식별자를 반환합니다. GUID와 유사하지 않습니다. 문서에서 : "ID에는 호스트 이름, 프로세스 ID 및 타임 스탬프가 포함되어있어 네트워크에서 ID가 고유해야합니다"
— Matt Spradley

당신이 옳을 수 있습니다. 실용적 한 라이너이며 아마도 CFUUID만큼 방탄하지는 않습니다. 더 엄격해야하는 사람은 CoreFoundation으로 넘어 가야합니다.
— Ryan McCuaig


7

ObjC에 대한 Guid 클래스의 간단하지만 빠른 구현을 여기에 업로드했습니다. obj-c GUID

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

다양한 문자열 형식과의 구문 분석도 가능합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.