JDUUID.m 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // JDUUID.m
  3. // JasonDevelop
  4. //
  5. // Created by Jason Lee on 3/9/15.
  6. // Copyright (c) 2015 JasonDevelop. All rights reserved.
  7. //
  8. #import "JDUUID.h"
  9. #import "KeychainItemWrapper.h"
  10. @interface JDUUID () {
  11. KeychainItemWrapper *_keychainItemWrapper;
  12. }
  13. @end
  14. @implementation JDUUID
  15. //처음에 UUID를 KeyChain에서 불러오는데 nil이라면 UUID를 생성해서 KeyChain에 저장한다.
  16. //저장 후에 다시 함수를 호출 하면 저장된 값을 리턴한다.
  17. - (NSString*)getUUID {
  18. NSString *uuid = [_keychainItemWrapper objectForKey:(__bridge id)(kSecAttrAccount)];
  19. if( uuid == nil || uuid.length == 0) {
  20. // if there is not UUID in keychain, make UUID and save it.
  21. CFUUIDRef uuidRef = CFUUIDCreate(NULL);
  22. CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
  23. CFRelease(uuidRef);
  24. uuid = [NSString stringWithString:(__bridge NSString *) uuidStringRef];
  25. CFRelease(uuidStringRef);
  26. // save UUID in keychain
  27. [_keychainItemWrapper setObject:uuid forKey:(__bridge id)(kSecAttrAccount)];
  28. }
  29. return uuid;
  30. }
  31. #pragma mark - Singleton
  32. + (JDUUID *)UUIDHandler {
  33. static JDUUID *_sharedUUIDHandler = nil;
  34. static dispatch_once_t onceToken;
  35. dispatch_once(&onceToken, ^{
  36. _sharedUUIDHandler = [[self alloc] init];
  37. });
  38. return _sharedUUIDHandler;
  39. }
  40. - (id)init {
  41. if (self = [super init]) {
  42. //내부 앱에서만 사용할 경우
  43. _keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:nil];
  44. // NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
  45. //Keychain Group끼리 공유할 경우
  46. // _keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"UUID" accessGroup:@"???????.com.yourcompany.GenericKeychainSuite"];
  47. }
  48. return self;
  49. }
  50. @end