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

참고