본문 바로가기

IOS Swift

iOS 앱 버전 코드로 확인하기 - Swift

목차

  1. iOS 앱 버전 확인 코드
  2. Semantic versioning란?

1. iOS 앱 버전 확인 

// 현재 버전
let nowVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String

// 앱스토어 버전 (앱스토어에 출시되고 약 24시간 이후 출시된 앱 버전 가져오므로 주의!!)
func latestVersion() -> String? {

        guard
            let bundleIdentifier = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String,
            let url = URL(string: "https://itunes.apple.com/lookup?bundleId=\(bundleIdentifier)"),
            let data = try? Data(contentsOf: url),
            let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
            let results = json["results"] as? [[String: Any]],
            let appStoreVersion = results[0]["version"] as? String else {
                return nil
            }
        return appStoreVersion
    }

// 업데이트 해야 하는지 비교
// 매개변수에 nowVersion, latestVersion넣은 이유는 임의의 값을 넣은 테스트코드를 작성하기 위해서 넣었습니다.
func shouldUpdate(nowVersion: String? = nowVersion,
                  latestVersion: String? = latestVersion()) -> Bool {
        
        guard
            let nowVersion = nowVersion,
            let storeVersion = latestVersion
        else { return false }
        
        let nowVersionArr = nowVersion.split(separator: ".").map { $0 }
        let storeVersionArr = storeVersion.split(separator: ".").map { $0 }
        
        print(nowVersionArr)
        print(storeVersionArr)
        
        // Major 또는 Minor 자리가 최신 버전보다 작으면 -> 업데이트 필요
        if nowVersionArr[0] < storeVersionArr[0] ||
            nowVersionArr[1] < storeVersionArr[1] {
            return true
        }
       
        return false
}

 

2. Semantic versioning

이 버저닝 규칙은 작성 방식에 관한 기준이 패키지마다 제각각 다른 문제를 해결하기 위해

Github의 공동창업자인 Tom Preston-Werner 기존의 현안을 모아 만든 제안입니다.

1.0.1 (Major.Minor.Patch) 버전으로 작성하며 간단하게 설명하자면

  • Major: 하위버전과 호환이 안되는 큰 변화
  • Minor: 기능 추가 
  • Patch: 버그 수정 

일 때 각각 +1씩하면 됩니다. 좀 더 자세한 정보 -> 링크

 

Semantic Versioning 2.0.0

Semantic Versioning spec and website

semver.org


참고 및 출처

https://velog.io/@sso0022/iOS-%EA%B0%95%EC%A0%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%95%B1%EC%8A%A4%ED%86%A0%EC%96%B4-%EC%B5%9C%EC%8B%A0%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0

 

[iOS] 강제 업데이트 / 앱스토어 최신버전 확인하기

서비스를 안정적으로 이용하기 위해 업데이트를 해주세요 ! 하는 법 🐶

velog.io

 

jsonObject options - 배열, 사전값 외에도 허용하도록 하려면 .fragmentsallowed 설정하면 됨, 그러나 여기서 뒤에 as? 로 사전으로 캐스팅하고 있으므로 옵션을 굳이 안적어도 될 것 같아서 적지 않음.

 https://developer.apple.com/documentation/foundation/jsonserialization/readingoptions/3081258-fragmentsallowed 

 

Apple Developer Documentation

 

developer.apple.com

 

반응형