iOSを使用してGUID / UUIDを作成する方法


207

iPhoneとiPadでGUID / UUIDを作成できるようにしたいのですが。

目的は、すべて一意の分散データのキーを作成できるようにすることです。iOS SDKでこれを行う方法はありますか?


3
iOS 5以降でKeyChainを使用している場合でも、生成された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を取得する方法で応答しました。Universally Unique Identifier(UUID)とUnique Device Identifier(UDID)は同じものではありません。
Joe

1
ここに、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

パーフェクト、これをありがとう!これはその日の私の+1の回答です:)
justinhartman '25年

シミュレーターでアプリを実行するたびに変化します。
Gajendra K Chauhan

46

Apple Developerのドキュメントを確認したところ、CFUUIDオブジェクトはiPhone OS 2.0以降で使用できることがわかりました。



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.