티스토리 뷰

안녕하세요 :) Zedd입니다.

문득..........갑자기 해보고싶은게 생겨서 ㅎ

;;그게뭔데;;;






이런거..?ㅎㅎ..그래서 해볼려구요~.~





최신버전확인하기





일단 제가 하고싶은거는





보통 여기에 최신버전 사용중 또는 현재 몇버전인지 쓰는 것 같은데...사용자들은 버전에 관심없으니

최신버전 사용중이라고 해줄게요.


그럼 경우의수가 2가지가 생기죠?


1. 최신버전인 경우 -> 최신버전 사용중이라고 해준다.

2. 최신버전이 아닌경우 -> 업데이트 필요?라고 해준다.


그럼 왠지 가져와야할게 2가지가 생기겠네요.

"현재" 내 앱의 버전과, 앱스토어에 올라와있는 버전.

그 둘을 비교하면 될 것 같네요. 


이걸 어떻게하냐..

찾아보니까 일단 내 앱 정보가 JSON형식으로 있는게 있는데, 여기에 version도 같이 나오거든요?

그거랑 내 현재 앱 버전을 비교해서 다르면 업데이트가 필요, 같으면 최신버전..

인 것 같아요 :)


그럼 차근차근 해봅시다.


1. "현재" 내 앱 버전 확인하기


  1. let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String


    if let version = version{

            print("version: \(version)"

    }



이렇게 할 수 있답니다. 


2. 앱스토어에 있는 앱 버전 확인하기


그러면 일단 내 앱의 Bundle ID를 알아야합니다.

어떻게 아냐? 


iTunes Connect > 나의 앱 > 확인하고 싶은 앱 클릭 > 앱정보 > 일반정보 > 번들ID

가 있습니다.

거기서 번들ID를 복사해주시고, 

(아니 걍 프로젝트에 있는 Bundle Identifier가 걍 번들ID아녀 ㅡㅡ? 라고 생각했는데...다들 위 방법으로 찾으시더라구요..뭔가 다른가? 분명 프로젝트에 있는 Bundle Identifier랑 무조건 같아야 앱을 올릴 수 있는 걸로 알고 있는데ㅎㅎ..)



  1. http://itunes.apple.com/lookup?bundleId=내번들ID

(아니;;; //를 주석으로 인식해서 회색이 되네 ㅇㄴㅇㄴㅇㄴ 색깔을 줘도 계속 안되네요)


내 번들ID쪽에 자신의 번들 ID를 넣어주시고, 복사해서 주소창에 치면!!!!!

JSON형식의 텍스트들이 나옵니다.

아니 이걸 보여줘도 되는건지 모르겠어서...................아니 물론 누구든 알 수 는 있겠지만!!!!!!그래도!!!!!!!!!사실 쫄림ㅎ그래서 캡쳐는 안할게요..

아무튼 JSON형식의 텍스트가 나옵니다..

version찾기 힘드실텐데..Command + F눌러서 version치고 찾아주면



내 지금 앱스토어에 올라간 버전을 알 수 있습니다.


그럼 해야할일이 더 명확해지네요.


1. 위 URL로 들어가 JSON을 파싱하여 저 version부분을 얻어온다.

2. "현재" 내 앱버전도 얻어온다.

3. 둘이 비교한다.

4. 다르면 업데이트가 필요하다고 해주고, 똑같으면 최신버전 사용중이라고 해준다.




  1. func isUpdateAvailable() -> Bool {

            guard

                let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,

                let url = URL(string: "http://itunes.apple.com/lookup?bundleId=내번들ID"),

                let data = try? Data(contentsOf: url),

                let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any],

                let results = json?["results"] as? [[String: Any]],

                results.count > 0,

                let appStoreVersion = results[0]["version"] as? String

                else { return false }

            if !(version == appStoreVersion) { return true }

            else{ return false }


            return false

        }



자..일단 오늘은 최신버전 확인하는 그런 주제니까 JSON을 가져오는 방법에 대해서는 세세한 설명은 하지 않을게요 :)

Codable로도 할 수 있겠지만...그 JSON중에서 딱 version하나만 가져오는거니깐.. 그냥 JSONSerialization을 사용했어요 키키



자.. 그럼 만약 현재 내 앱버전과 앱스토어 버전이 다르다면 true를 받겠고, 같다면 false를 받겠네요.

(isUpdateAvailable이니까 업데이트 할 게 있으면 true고 없으면 false니까요!!)


그럼 호출 ㄱㄱ 

뭐 다들 다르겠죠?..위 메소드를 어떻게 사용할건지??!

원하시는 대로 사용해주세요.

저는




현재버전과 앱스토어버전이 같다면 위처럼 해주었어요.

자..근데 다르다면?


일단 다르다고 표시가 되겠죠?

(저는 "An update is required"라고 표시되게 했어요 :))


그리고 이제!! 업데이트를 유도 해야겠죠?

어떻게 할까 하다가...티스토리 앱처럼 View를 하나 추가해서 한번 더 Depth를 거쳐서 어케어케 할까 하다가..

그냥 앱스토어 바로 연결해줘도 되는거겠죠?......

아니면 대부분의 앱처럼 (주로 게임) alert를 띄워서 하는 것도 괜찮겠네요...

이거 보통 UX어떻게 하시나요???...........바로 연결해줘도 되는건지..


일단 앱스토어 연결해주기로 결정XD (업데이트가 필요할때만)

최신버전일때는 클릭해도 아무 변화가 없도록 해줄게요 :)


아무튼 본인이 하고자하는 방향에따라 구현해주시면 될 것 같아요.

업데이트해서 내일 잘 되나 봐야지 키키

아무튼 오늘도 도움이 되었길 바래요 XD

혹시 지적할 부분이나 틀린 부분 등이 있다면 언제든지 댓글이나 PC화면 오른쪽 하단의 채널 서비스를 이용해주세요:)


출처 :

https://stackoverflow.com/questions/6256748/check-if-my-app-has-a-new-version-on-appstore

댓글
  • 프로필사진 왕초보 항상 좋은글보고 많이 배우고 있습니다.
    질문이 있습니다.
    심사를 통과해서 배포를 누르면 국가별로 앱스토어에 뜨는 시간이 다르잖아요?
    이 경우 이 방법이 국가 설정에 자동으로 연결 될지 궁금하네요.
    업데이트 있다고 해서 앱스토어 가보면 아직 안올라온 경우가 있더라구요.
    2020.02.27 11:39
  • 프로필사진 Favicon of https://zeddios.tistory.com BlogIcon Zedd0202 네 맞아요. 버전은 새로운 버전으로 떨어지는데 막상 가보면 업데이트 안뜬 경우가 좀 있더라구요; 이 부분은 어쩔 수 없다고 판단하고있어요.
    2020.02.27 12:20 신고
댓글쓰기 폼
Total
3,260,860
Today
489
Yesterday
1,782