LoginSignup
20
19

More than 5 years have passed since last update.

UIIDをUIDeviceで管理するカテゴリ拡張

Last updated at Posted at 2013-05-11

業務で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に保存するという方が多いと思いますが、参考までに。

20
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19