What's the difference between "version number" in iTunes Connect, "bundle version", "bundle version string" in Xcode?

Apple's doc could have been more clear on how to submit an update version.

As asked in the title, What's the difference between

  1. version number in itunes connect(which you have to supply when you submit an update)
  2. bundle version in xcode
  3. bundle versions string, short

Are they related in any way?


Solution 1:

Yes, they are related. They all refer to the version of your application.

  • iTunes Connect
    This is the version number shown in the App Store; This must be a pure version number like 1.2.3

  • Bundle Version (CFBundleVersion)
    This doesn't need to be a pure version number. This can be something like 12345 or 1.2.3 (Build 12345AB). This is shown in the About window for Mac OS X apps for example and is often more a "Build Number" than a "Version Number".

  • Bundle Version String (CFBundleShortVersionString) This value is used as the "real" version number. This must be the same string as used for the version in iTunes Connect.

Update:
As pointed out by @snlehton, the CFBundleVersion has to be a pure version number like 1.2.3 when you want to upload your application to the (iOS) App Store.

Solution 2:

Yes they are related but their definition depends on how they are used.

  • iTunes Connect Version

    Always must be a version number, e.g. 1.0

Usage mode 1 - Only CFBundleVersion is set

  • Bundle Version (CFBundleVersion)

    Must be a version number, e.g. 1.0. Must match the iTunes Connect Version.

Usage mode 2 - Both CFBundleVersion and CFBundleShortVersionString are set

  • Bundle Version (CFBundleVersion)

    Must be a build number, e.g. a single integer like 435163.

  • Bundle Short Version String (CFBundleShortVersionString)

    Must be a version number, e.g. 1.0. Must match the iTunes Connect Version.

Usage mode 2 is the best way to go. Here are some example numbers for an app's upgrade path:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

An extra note on version numbers: If you submit a minor update (e.g. bug fix) to your app you must never miss out periods in the version number, e.g always use 1.0.1 and NEVER 1.01 or you will risk not being able to use certain version numbers in the future because it won't be possible to increment them.

Solution 3:

Yep, they all are related.

Version Number in itunesconnect is the version number you need to supply. For example, 2.1.1 or 3.1.2 etc. This also should be equal to the CFBundleShortVersionString.

Bundle Version In Xcode (CFBundleVersion) represents just the Build number which identifies an iteration (released or unreleased) of the application.

Bundle versions string, short (CFBundleShortVersionString) is a number comprising of three integers separated by dots. First one represents any major updates of the application, such as updates that implement new features or major changes. The second integer denotes revisions that implement less prominent features. The third integer represents maintenance releases.