Tag Archives: Version

iOS CFBundleVersion와 CFBundleShortVersionString에 대한 이해

CFBundleVersion와 CFBundleShortVersionString의 차이점

ios_app_version_01

XCode에서 보면 위와 같이 버전 정보를 설정하는 부분을 볼 수 있습니다. 하나는 Version이고 다른 하나는 Build입니다. 이 버전 정보들을 Info.plist에서 확인해 보면 다음과 같은 형태로 저장이 되어있는것을 확인할 수 있습니다.

ios_app_version_02

보시면 Version → Bundle versions string, short이고 Build → Bundle version인것을 알 수 있습니다. 실제로 XCode가 사용하는 설정 키 값은 Version → CFBundleShortVersionString이며 Build → CFBundleVersion입니다. 이 두 버전값에 대해 알아보겠습니다.

CFBundleVersion

문자열(String) 값이며 iOS, OS X에서 릴리즈 된 혹은 아직 안된 앱 번들의 빌드 버전을 정의하는데 사용합니다. 이 빌드 버전은 3개의 양수로 된 정수값들의 조합으로 만들어집니다. 첫번째 정수값은 0보다 커야하며 각 문자열은 숫자(0-9)만을 포함할 수 있으며 사이마다 구분자로 점(.)이 들어갑니다. 각각의 정수값의 시작값이 0일 경우 그 값은 무시됩니다. 즉 1.02.31.2.3과 완벽하게 동일합니다. 이 값은 로컬라이징 될 수 없습니다.

CFBundleShortVersionString

이 값은 CFBundleVersion과 매우 흡사하지만 앱 번들의 릴리즈 버전만을 표시하는데 사용됩니다. 마찬가지로 릴리즈 버전역시 3개로 분리된 정수값으로 사용이 되며 첫번째 정수값은 앱의 메이저 리비전(Major Revision)을 표현하는데 사용됩니다. 이 리비전은 앱에 새로운 기능이 추가되거나 매우큰 변화가 구현되었을 때 증가합니다. 두번째 정수값은 덜 중요한 변화가 앱에 발생했을 경우에 증가합니다. 마지막으로 세번째 정수값은 버그 수정과 같이 운영에 필요한 업데이트가 발생할 경우 증가하게 됩니다.

이 CFBundleShortVersionString이 CFBundleVersion과 가장 다른점은 CFBundleVersion은 릴리즈 되었던 안되었던 비공식적인 버전을 포함한 모든 버전에 대한 버전값으로써 사용된다는 것이고 CFBundleShortVersionString은 출시버전을 나타냅니다. 또한 InfoPlist.strings를 통해 로컬라이징이 가능합니다.

CFBundleShortVersionString은 유저가 느끼게 되는 버전체계이고 iTunesConnect의 값과 동일해야 합니다.

CFBundleVersion와 CFBundleShortVersionString값 읽어오기

두 버전 정보를 읽어오기 위해서는 다음의 방법을 사용하면 됩니다.

NSString *appVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *buildVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    
NSLog(@"CFBundleShortVersionString=%@, CFBundleVersion=%@", appVersion, buildVersion);

다음과 같이 값을 정상적으로 읽어오는것을 확인하실 수 있습니다.

2015-09-04 21:38:42.130 AppVersionExample[4185:422747] 
  CFBundleShortVersionString=1.0.1, CFBundleVersion=1.2.3

참고

[iPhone] 어플리케이션의 버젼 정보 가져오기

아이폰 어플리케이션의 버젼은 Info.plist안에 정의되어있습니다. 실제로 앱스토어에 올릴때도 이 버젼이 적용되게 되죠.

어플리케이션 내부에서 버젼을 표시하고 싶을경우가 있습니다. 이때 버젼이 판올림 되게 된다면 Info.plist뿐만 아니라 버젼을 표시해야 하는 부분의 소스코드를 수정해야 하게 됩니다.
이때는 다음과 같은 방법으로 Info.plist안에 정의된 버젼정보를 가져올 수 있습니다. 숫자이외의 값이 버젼정보로 쓰였더라도 문제없이 사용가능합니다.

[code]NSString *versionNumber = [[[NSBundle bundleForClass:[self class]] infoDictionary] objectForKey:@”CFBundleVersion”];
    
NSLog(@”Version: %@”, versionNumber);[/code]

사용자 삽입 이미지1301542994.zip