iosapp-storeapp-store-connectmac-app-store

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


Version/build fields for an iOS app include:

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


Solution

  • Apple Technical Note TN2420, Version Numbers and Build Numbers

    Summary:


    Version Number and Build Number Checklist

    Here are some things you can check when submitting a new build to the App Store. Making sure you have your Version Number and Build Number set properly will help you by avoiding having your App automatically rejected for having them improperly configured.

    1. For each new version of your App, you need to invent a new Version Number. This number should be a greater value than the last Version Number that you used. Though you may provide many builds for any particular release of your App, you only need to use one new Version Number for each new release of your App.
    2. You cannot re-use Version Numbers.
    3. For every new build you submit, you will need to invent a new Build Number whose value is greater than the last Build Number you used (for that same version).
    4. You can re-use Build Numbers in different release trains, but you cannot re-use Build Numbers within the same release train. For macOS apps, you cannot re-use build numbers in any release train.

    Based on the checklist, the following (Version, Build Number) sequence is valid too.