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에서는 사용할 수 없는 프로퍼티값이긴 하지만 이렇게 지금이라도 대안을 만들어준 애플에 감사하며..
6 comments
좋은 정보 감사합니다.
그럼 IOS6 이후에서는 UDID를 대신하는 방법으로 사용 가능한건가요?
그리고 혹시 해당 어플을 지웠다가 다시 깔았을 경우에는 어떻게 되는지 궁금합니다.
네 가능합니다. 이 UDID가 기존과 다른 부분은 앱에 대한 UUID도 아니고 단말 자체의 UDID도 아닌 앱 등록자에게 부여된 UDID로 생각하시면 됩니다. 즉, Apple ID를 다르게 하지 않는 이상은 동일하게 나타나는 것으로 파악하고 있습니다.
결국 iOS 5 이하는 버려야하나요? ㅎ
iOS5가 참 애매해진… ㅋ
uuid 같지 디바이스 초기화 해도 identifierForVendor는 같은 값을 리턴하는 건가요?
identifierForVendor 메소드의 경우 app identifier가 아닌 vendor identifier의 UUID값을 리턴합니다. 따라서 디바이스 초기화해도 같은 값을 리턴합니다.