목차
- iOS 앱 버전 확인 코드
- 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씩하면 됩니다. 좀 더 자세한 정보 -> 링크
참고 및 출처
jsonObject options - 배열, 사전값 외에도 허용하도록 하려면 .fragmentsallowed 설정하면 됨, 그러나 여기서 뒤에 as? 로 사전으로 캐스팅하고 있으므로 옵션을 굳이 안적어도 될 것 같아서 적지 않음.
반응형
'IOS Swift' 카테고리의 다른 글
Swift Codable로 Json null 값 파싱하기 (0) | 2022.08.02 |
---|---|
Swift 텍스트필드 키보드 내리기 (0) | 2022.07.10 |
Fastlane Match로 Signing 하기(feat. iOS) (0) | 2022.04.22 |
Fastlane 배포 자동화 적용(feat. iOS) (0) | 2022.04.21 |
RxSwift 정리 (0) | 2022.03.30 |