iOS6에서 다시 태어난 UUID!

iOS5부터 deprecated된 기기의 UDID를 가져오는 메소드 때문에 골머리 썩고 있는 업체가 많은 것으로 알고 있다.
사실 나부터 이것 때문에 꽤 골머리 아팠으니까..
기존 UUID를 만드는 메소드는 호출할 때마다 다른 값을 가져와서 이에 대한 적절한 대책이 필요했지만 iOS6부터는 심플하게 해결될 것으로 보인다.

애플에서는 이 문제를 의식했던지 (혹은 외부의 압박에 굴복하여..) 이에 대한 대안을 iOS6에 구현하였다.

결과적으로 UIDevice 클래스내에 추가된 identifierForVendor라는 프로퍼티가 기존 UUID에 대한 대안이다.

주석을 해석해보면 Vendor에 따른 UUID값이라는 것을 알 수 있다.
즉, Project의 Vendor에 따른 UUID값이니 Project의 Identifier가 달라도 Vendor가 동일하다면 동일한 값을 리턴한다는 의미겠지?
의심스러운 마음에 테스트를 진행하여보았다.

아! Vendor는 새 프로젝트 생성 시 입력하게 되는 Company Identifier를 의미한다.


테스트로 진행한 방법은 새 프로젝트를 3개 만드는데 2개는 동일한 Company Identifier를 입력하였고 나머지 1개는 앞의 2개와 다른 Compancy Identifier를 입력하였다.
이렇게 만들어진 프로젝트의 AppDelegate의 최초 호출 메소드인 didFinishLaunchingWithOptions 내에서 [[UIDevice currentDevice] identifierForVendor]의 로그를 확인하는 코드를 입력하였다.

NSLog(@"vendor identifier : %@",[[UIDevice currentDevice] identifierForVendor]);

각각의 프로젝트를 iPhone Simulator, iPhone4S, iPad2에서 실행하여 로그를 보았다.

결과! 주석의 설명이 맞았다. Compandy Identifier가 동일한 경우 동일한 identifier값이 나타났다.

비록 iOS5에서는 사용할 수 없는 프로퍼티값이긴 하지만 이렇게 지금이라도 대안을 만들어준 애플에 감사하며..

Comments (6)

  1. 좋은 정보 감사합니다.
    그럼 IOS6 이후에서는 UDID를 대신하는 방법으로 사용 가능한건가요?
    그리고 혹시 해당 어플을 지웠다가 다시 깔았을 경우에는 어떻게 되는지 궁금합니다.

    • 네 가능합니다. 이 UDID가 기존과 다른 부분은 앱에 대한 UUID도 아니고 단말 자체의 UDID도 아닌 앱 등록자에게 부여된 UDID로 생각하시면 됩니다. 즉, Apple ID를 다르게 하지 않는 이상은 동일하게 나타나는 것으로 파악하고 있습니다.

    • identifierForVendor 메소드의 경우 app identifier가 아닌 vendor identifier의 UUID값을 리턴합니다. 따라서 디바이스 초기화해도 같은 값을 리턴합니다.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.