2014-01-14

The two version/build fields for an iOS app are:

"Version" CFBundleShortVersionString (String - iOS, OS X) specifies the release version number of the bundle, which identifies a released iteration of the app. The release version number is a string comprised of three period-separated integers.

"Build" CFBundleVersion (String - iOS, OS X) specifies the build version number of the bundle, which identifies an iteration (released or unreleased) of the bundle. The build version number should be a string comprised of three non-negative, period-separated integers with the first integer being greater than zero. The string should only contain numeric (0-9) and period (.) characters. Leading zeros are truncated from each integer and will be ignored (that is, 1.02.3 is equivalent to 1.2.3). This key is not localizable.

https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-111349

The answer here explained the iOS version/build numbers well:
http://stackoverflow.com/a/6965086/1265393

Release version 1.0.0 might be build 542. It took 542 builds to get to a 1.0.0 release.

Release version 1.0.1 might be build 578.

Release version 1.1.0 might be build 694.

Release version 2.0.0 might be build 949.

My question is:

Which version/build numbers are required to be incremented when a new version of the app is uploaded to the app store?

Can either CFBundleShortVersionString or CFBundleVersion remain the same between app updates?

Or are they compared to the previous respective number to ensure that a numerically greater number is uploaded with the new version of the app?

Are the CFBundleShortVersionString and CFBundleVersion numbers in any way compared to each other?

Extra points for Apple sources or the exact error messages iTunesConnect displays upon uploading an invalid version/build number.

Show more