title: Which iOS app version/build number(s) MUST be incremented upon App Store release?
body: <p>Version/build fields for an iOS app include:</p>
  <ul>
  <li><p>&quot;Version&quot; <strong>CFBundleShortVersionString</strong> (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.</p>
  </li>
  <li><p>&quot;Build&quot; <strong>CFBundleVersion</strong> (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.</p>
  </li>
  <li><p><strong>&quot;iTunes Connect Version Number&quot;</strong>: version number you specify when creating a new version of the app on iTunes Connect.</p>
  </li>
  </ul>
  <p>My question is:</p>
  <p>Which version/build numbers are <strong>required to be incremented</strong> when a new version of the app is uploaded to iTunes Connect and/or released to the App Store?</p>
  <p>Can either &quot;version&quot; <code>CFBundleShortVersionString</code> or &quot;build&quot; <code>CFBundleVersion</code> remain the same between app updates?</p>
  <p>Extra points for Apple sources or the exact error messages iTunesConnect displays upon uploading an invalid version/build number.</p>
  <hr />
  <h3>Android / Google Play note:</h3>
  <p>The discussion prompting this question is that the public &quot;version&quot; of an Android app in the Google Play Store does <strong>not</strong> need to be incremented and is in <em>no way</em> validated. The <code>android:versionName</code> can remain the same between releases, upgrade, downgrade, or be any random string rather than something that appears to be a valid &quot;version number&quot;.</p>
  <blockquote>
  <p><code>android:versionName</code> — A string value that represents the release version of the application code, as it should be shown to users.</p>
  <p>The value is a string so that you can describe the application version as a <code>&lt;major&gt;.&lt;minor&gt;.&lt;point&gt;</code> string, <strong>or as any other type</strong> of absolute or relative version identifier.</p>
  </blockquote>
  <p><a href="https://stackoverflow.com/questions/8366113/difference-between-versionname-and-versionnumber-in-android/8366142">Difference between versionName and versionNumber in Android</a></p>
  <p>Whereas the <code>android:versionCode</code> is enforced to be an incrementing-on-release integer.</p>
  <hr />
  <h3>Apple documentation</h3>
  <p>As noted in <a href="https://stackoverflow.com/a/38009895/1265393">the newly accepted answer</a>, Apple has recently published a Technical Note that details their version and build number scheme:</p>
  <p><a href="https://developer.apple.com/library/ios/technotes/tn2420/_index.html" rel="noreferrer">Apple Technical Note TN2420 - Version Numbers and Build Numbers</a></p>