pkamb pkamb - 5 months ago 72
iOS Question

Which iOS app version/build number(s) MUST be incremented upon App Store release?

The three 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.

  • "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 the App Store?

Can either
CFBundleShortVersionString
or
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.


Whereas the
android:versionCode
is enforced to be an incrementing-on-release integer.

Answer

Both CFBundleVersion and CFBundleShortVersionString MUST be incremented when releasing a new version to the App Store.

Additionally, one of the strings must must match the version specified in iTunes Connect.

Xcode Organizer Validator error: must increment the version number.

This question includes the above screenshot of the Xcode Organizer's Validator refusing to validate the app when the CFBundleVersion and CFBundleShortVersionString have not been incremented.

  • This bundle is invalid. The value for key CFBundleVersion [1.0] in the Info.plist file must contain a higher version than that of the previously uploaded version [1.134].

  • This bundle is invalid. The value for key CFBundleShortVersionString [1.0] in the Info.plist file must contain a higher version than that of the previously uploaded version [1.134].

The validator also throws an error proving that one of the strings must match the version of the app created on iTunes Connect.

  • Version Mismatch. Neither CFBundleVersion ['1.0'] nor CFBundleShortVersionString ['1.0'] in the Info.plist match the version of the app set in iTunes Connect ['1.4'].