왕논의 연구실

[Xcode] 앱 버전 & 빌드 관리 본문

iOS/Xcode

[Xcode] 앱 버전 & 빌드 관리

ywangnon 2022. 5. 27. 03:01

앱을 새롭게 출시하려고 할 때, 버전을 올려서 출시를 해야합니다. 기존보다 숫자를 올리기만 하면 되니까 그냥 올릴 수도 있지만, 규칙을 가지고 올린다면 프로젝트를 관리하는데 더 편하게 관리할 수 있습니다.

 

버전

사람이 읽기 위한 릴리스버전을 관리하기 위해 사용합니다.

 

0.0.0

 

위와 같은 [메이저], [마이너], [패치] 형식으로 버전을 관리합니다.

[메이저] : 기존버전과 호환되지 않을 정도의 API 변화가 있는 업데이트에 올린다고 합니다.

저는 UI에 큰 변화가 있거나 앱의 방향성을 바꾸는 기능 업데이트시 올리려고 합니다.

[마이너] : 기존버전과 호환되면서 새로운 기능이 추가된 업데이트에 올린다고 합니다.

저도 UI에 큰 변화없는 기능 추가시 올리려고 합니다.

[패치] : 기존버전과 호환되면서 버그수정. 자잘한 수정이나 버그 수정 정도의 업데이트를 생각하면 됩니다.

 

참고

유의적 버전

 

유의적 버전 2.0.0

Semantic Versioning spec and website

semver.org

 

빌드 번호

빌드번호를 작성하는 방법에는 2가지가 있습니다.

날짜 + 그 날 빌드 돌린 횟수로 정하는 것과 계속 1씩 올리는 것이 있습니다.

 

코드로 접근하는 법

각 항목의 키값입니다.

extension Bundle{
    // 앱 이름
    class var displayName : String{
        if let value = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String{
            return value
        }
        return ""
    }
        
    // 번들 식별자
    class var bundleIdentifier: String{
        if let value = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String {
            return value
        }
        return ""
    }

    // 버전
    class var appVersion: String{
        if let value = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
            return value
        }
        return ""
    }
    
    // 빌드 번호
    class var appBuildVersion: String{
        if let value = Bundle.main.infoDictionary?["CFBundleVersion"] as? String{
            return value
        }
        return ""
    }
}

 

빌드번호 자동 증가

릴리즈 버전 같은 경우는 각 숫자를 올려야하는가에 대한 판단을 한 후 올려야 합니다. 하지만 빌드번호같은 경우는 조건에 따라 증가시키기만 해도 되어서 쉘 스크립트를 사용하여 자동 증가 시킬 수 있습니다.

 

검색해서 나오는 많은 쉘 스크립트의 경우에는 xcode 11이전에 작성된 것 같습니다. xcode 11이전에는 info.plist 파일에서 빌드번호를 읽었는데, xcode 11버전 이후에는 pbxproj에서 값을 읽어들이는 방식으로 바뀌었습니다. 그래서 기존 쉘 스크립트를 넣으면 오류가 납니다. 그래서 기존에 쉘 스크립트 중 plistbuddy를 사용하는 방식은 오류가 나고, 새로운 방식으로 작성해야합니다.

 

빌드할때마다 빌드번호 하나씩 올리기

buildNumber=$(xcodebuild -showBuildSettings | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION =')
buildNumber=`echo $buildNumber +1|bc`
xcrun agvtool new-version $buildNumber

 

참고

https://blogappdev.wordpress.com/2012/08/29/xcode빌드시-version과-build의-차이점/

https://infinitt.tistory.com/387

https://www.bsidesoft.com/2970

https://blog.tjitjing.com/index.php/2021/09/auto-increment-build-number-in-xcode-11-xcode-12.html

'iOS > Xcode' 카테고리의 다른 글

[Xcode] InfoPlist 값 Debug/Release 에 따라 조절하기  (0) 2022.06.08