Version/build fields for an iOS app include:
"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.
"iTunes Connect Version Number": version number you specify when creating a new version of the app on iTunes Connect.
My question is:
Which version/build numbers are required to be incremented when a new version of the app is uploaded to iTunes Connect and/or released to the App Store?
Can either "version" CFBundleShortVersionString
or "build" CFBundleVersion
remain the same between app updates?
Extra points for Apple sources or the exact error messages iTunesConnect displays upon uploading an invalid version/build number.
Android / Google Play note:
The discussion prompting this question is that the public "version" of an Android app in the Google Play Store does not need to be incremented and is in no way validated. The android:versionName
can remain the same between releases, upgrade, downgrade, or be any random string rather than something that appears to be a valid "version number".
android:versionName
— A string value that represents the release version of the application code, as it should be shown to users.The value is a string so that you can describe the application version as a
<major>.<minor>.<point>
string, or as any other type of absolute or relative version identifier.
Difference between versionName and versionNumber in Android
Whereas the android:versionCode
is enforced to be an incrementing-on-release integer.
Apple documentation
As noted in the newly accepted answer, Apple has recently published a Technical Note that details their version and build number scheme:
Apple Technical Note TN2420 - Version Numbers and Build Numbers