이번에 어플 업데이트 하면서 아주 곤욕을 치룬 코드이다.


보면 아주 간단하지만. 이것때문에 일주일간을 몸져누울뻔했다.



코드는 아래와 같이 간단하게 되어 있다.



NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];

NSString* bundleId = infoDictionary[@"CFBundleIdentifier"];

NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", bundleId]];

NSData* data = [NSData dataWithContentsOfURL:url];

NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

     

if ([lookup[@"resultCount"] integerValue] >= 1){

     NSString* appStoreVersion = lookup[@"results"][0][@"version"];

     NSString* currentVersion = infoDictionary[@"CFBundleVersion"];

         

if (![appStoreVersion isEqualToString:currentVersion]) {

return NO;

}

}

return YES;



위 코드는 일반적으로 구글에서 검색해보면 나오는 코드이다.


여기서 핵심은 


1. [[NSBundle mainBundle] infoDictionary];

2. http://itunes.apple.com/lookup? 에서 받아오는 데이터와 주소


1번 같은경우는 우리가 만든 프로젝트의 BundleId를  가져오는 것이다.

2번은 해당 주소를 호출해 우리가 원하는 데이터를 가져오는 것이다.




그런데 이번에 이 부분을 업데이트 하면서 아주 곤욕을 치룬 일을 공유해본다.



이번에 대대적인 업데이트를 하면서


해당 코드를 추가하고 버전이 다르면 업데이트 팝업창을 호출하는 형식을 만들었다.



그런데!! 이게 왠말인가




 문제점 발견



출시가 되어도 업데이트 팝업창이 나오지 않는 현상을 발견했다.


처음에는 출시되고 동기화가 되는데에 좀 걸릴 수 있지 라고 생각하고 기다려보았다.

보통 출시되고 30분 ~ 2시간 이내에 동기화가 된다.


그래 마냥 기다리면 동기화가 되겠지하고 손놓고 기다리는데 퇴근할때까지 업데이트가 안되는걸 확인하고 


부랴부랴 해당 로그를 확인해본보았다.





현재 버전 : 2.0  

스토어에 업데이트 되는 버전 : 2.1


우선 테스트 한 순서


1. http://itunes.apple.com/lookup?bundleId="com.crazybrain.appstoreversion"

2. http://itunes.apple.com/lookup?id="12341234"

3. http://itunes.apple.com/lookup?bundleId="com.crazybrain.appstoreversion"&id=12341234

4. Mobile 에서 http://itunes.apple.com/lookup?id="12341234" 주소 호출

= Chrome 어플 에서 주소 호출

= Samsung Browser 어플 에서 주소 호출

= Daum 어플 에서 주소 호출

= Naver 어플 에서 주소호출



테스트 결과


1. version="2.0"

2. version="2.0"

3. version="2.1"

4. Mobile = Crhome 어플 [ version= "2.1" ]

= Samsung Browser 어플 [ version="2.1" ]

= Daum 어플 [ version="2.1" ]

= Naver 어플 [ version="2.0" ]



모냐 이거... 왜 다 다르냐... 이해할려고 해도 할 수 가 없는 현상...


* 이거는 읽으신분 중에 혹시 아시는분은 답변좀 달아 주셨으면 한다.




저렇게 불확실한거 그냥 서버에 DB만들어서 내가 버전체크해주는게 속 편하다는 생각에 그냥 서버 통신으로 우회..



그래서 필자는 버전체크를 중요치 않은 앱들은 위 방법을 쓰라고 추천해드리지만. 그게 아니면 내부적으로 버전체크하는게 좋다고 본다.





아.. 보기 좋게 만드는거는 나중에 해야겠다 지금은 자다가 빡침에 글올리느라 그냥 끄적끄적...

+ Recent posts