業務でiOSアプリを開発していると、UUIDやUIIDを取得・使用することもしばしば。
NSUserDefaultsやDBに保存するコードを書くのも面倒な私はUIDeviceにこんなカテゴリを作って使用しています。
ちなみにUUIDやUIIDに関してはこちらのエントリが分かりやすいかも
http://d.hatena.ne.jp/tanamon/20120924/1348491831
UIDevice+Identifier.h
//UIIDを格納するNSUserDefaults上のキー
#define kUIID @"uniqueInstallationIdentifier"
@interface UIDevice (Identifier)
//UUIDを生成して返却するメソッド
+ (NSString*)universallyUniqueID;
//UIIDを生成して返却するメソッド。1インストールで1UIIDとなる。内部で自動管理する
+ (NSString*)uniqueInstallationID;
//内部で管理しているUIIDを削除する
+ (BOOL)removeManagedUIID;
@end
UIDevice+Identifier.m
@implementation UIDevice (Identifier)
+ (NSString*)universallyUniqueID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
NSString *string = (NSString *)CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return string;
}
+ (NSString*)uniqueInstallationID
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *ret = nil;
if ([defaults objectForKey:kUIID] == nil) { //管理しているUIIDが存在しない場合
ret = [self universallyUniqueID];
if (ret != nil) {
[defaults setObject:ret forKey:kUIID];
[defaults synchronize];
}
} else { //管理しているUIIDが既に存在する場合はその値を返却する
ret = [defaults objectForKey:kUIID];
}
return ret;
}
+ (BOOL)removeManagedUIID
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kUIID];
return [[NSUserDefaults standardUserDefaults] synchronize];
}
@end
呼び出しは以下
SomeClass.m
NSString *uiid = [UIDevice uniqueInstallationID];
uniqueInstallationIDメソッドの処理は管理しているUIIDが存在しない場合はuniversallyUniqueIDを使ってUUIDを生成し、その値をUIIDとしてNSUserDefaultsに保存します。
以降、管理しているUIIDが削除されるまではその値を返却し続けます。
UIIDはDBに保存したり独自にNSUserDefaultsに保存するという方が多いと思いますが、参考までに。