Macで標準の128ビットGUID(UUID)を生成する方法はありますか?
-
08-07-2019 - |
質問
.NETに相当する組み込み関数があります
Guid.NewGuid();
Cocoaの場合
私の希望は、一意の識別子を表す 550e8400-e29b-41d4-a716-446655440000
の行に沿って文字列を生成することです。
解決
UUIDは、Core FoundationでCFUUIDライブラリによって処理されます。探している関数は CFUUIDCreate 。
さらなる検索のためのFYI:これらは最も一般的にUUIDとして知られています。GUIDという用語はMicrosoftの世界以外ではあまり使われていません。あなたはその検索語でもっと運がいいかもしれません。
他のヒント
一部のコード:
文字列UUIDの場合、次のクラスメソッドでトリックを実行する必要があります。
+(NSString*)UUIDString {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString *)string autorelease];
}
本当に文字列ではなくバイトが必要な場合:
+(CFUUIDBytes)UUIDBytes {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFUUIDBytes bytes = CFUUIDGetUUIDBytes(theUUID);
CFRelease(theUUID);
return bytes;
}
CFUUIDBytesは UUIDバイトの構造。
少なくともMacOSX 10.5.xでは、コマンドラインツール" uuidgen"を使用できます。あなたの文字列を取得する 例:
$ uuidgen
054209C4-3873-4679-8104-3C18AE780512
このコマンドには、ヘッダースタイルで便利に生成するオプション-hdrもあります
詳細については、マンページを参照してください。
または uuidgen
コマンドラインツールがあります。
10.8以降では、NSString * uuidString = [[NSUUID UUID] UUIDString];
も使用できます。Wikipedia の記事と Core Foundation ページ。
10.3以降では、 [[NSProcessInfo processInfo] globallyUniqueString]
。ただし、この現在はUUIDを生成しますが、これは一度も実行されておらず、それを実行することも保証されていないため、一意の文字列だけでなく UUID が本当に必要な場合、CFUUIDを使用する必要があります。