# ITMS-90062: the version must be higher than the approved one

> ITMS-90062 means the build reuses a version Apple already approved. Raise CFBundleShortVersionString, create that version in App Store Connect, upload again.

Canonical: https://app369.com/fix/itms-90062-version-must-be-higher/
Last updated: 2026-11-09

ITMS-90062 is the App Store Connect upload error for a build whose version number isn’t higher than the last approved version. Apple reads that number from CFBundleShortVersionString. Raise it, for example from 1.2.0 to 1.2.1, and upload a new build.

**Short answer**

Read the approved version in the error message and go above it. Set the new version in the part before + in a Flutter pubspec, or in Marketing Version in a native Xcode project, raise the build number too, and archive again. In App Store Connect, create the new version with the same number.

Rather not fix it yourself? [**App Fix Ticket**](https://app369.com/fixed-price/flutter-firebase-bug-fix/) starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

## **Why the version is rejected, and the fix**

1. 01 ### **The version was already approved**
  > “In the New Version dialog, enter an incremental App Store version number, then click Create.” [**App Store Connect Help, Create a new version**](https://developer.apple.com/help/app-store-connect/update-your-app/create-a-new-version) Once a version has been approved, every later upload needs a higher one. Pick the next number, such as 1.2.1, and use it in Xcode and in App Store Connect.
2. 02 ### **The version string format also matters**
  > “The required format is three period-separated integers, such as 10.14.1. The string can only contain numeric characters (0-9) and periods.” [**Apple Developer, CFBundleShortVersionString**](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleshortversionstring) Apple compares the numbers in order, so 1.10.0 is higher than 1.9.0, not lower. Letters, a v prefix or a suffix such as -beta don’t belong in this field and cause upload errors of their own.
3. 03 ### **Flutter or CI sets the version, not Xcode**
  > “In iOS, build-name uses CFBundleShortVersionString while build-number uses CFBundleVersion.” [**Flutter docs, Build and release an iOS app**](https://docs.flutter.dev/deployment/ios) In a Flutter app the pubspec version feeds both numbers, so a change made only in Xcode is overwritten on the next build. Raise it in pubspec.yaml, or pass it on the build command in CI.```
# pubspec.yaml: version is build-name, after + is build-number
version: 1.2.1+42

# or set both on the command line
flutter build ipa --build-name=1.2.1 --build-number=42
```
4. 04 ### **A native project has a typed-in number** In a native iOS project, a fixed value in Info.plist means Xcode’s Marketing Version setting never reaches the build. Point the keys at the build settings below. In a Flutter project, use $(FLUTTER_BUILD_NAME) and $(FLUTTER_BUILD_NUMBER) instead, so the pubspec version reaches the build.```
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
```
5. 05 ### **Raise the build number as well**
  > “In Xcode, increment the build string before you upload your build to App Store Connect, as described in Set the version number and build string.” [**App Store Connect Help, Create a new version**](https://developer.apple.com/help/app-store-connect/update-your-app/create-a-new-version) The build number is separate from the version. A new version can restart it, but uploading the same version again needs a new build number, so raising both avoids a second rejection.

Checked against the vendor’s docs on November 9, 2026: [Apple Developer: CFBundleShortVersionString](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleshortversionstring); [Apple Developer: CFBundleVersion](https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleversion); [App Store Connect Help: Create a new version](https://developer.apple.com/help/app-store-connect/update-your-app/create-a-new-version); [Flutter docs: Build and release an iOS app](https://docs.flutter.dev/deployment/ios).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

**Resubmit before Apple’s holiday slowdown**

Pay for the Diagnosis and send the rejection and access to the app by Monday, December 7 (US Eastern). The Diagnosis is back by Thursday, December 10. Pay for the Fix that day and it arrives as a pull request by Thursday, December 17, in time to build and resubmit before December 20.

In past years Apple said reviews may take longer around the holidays: [December 20 to 26 in 2024 (opens in a new tab)](https://developer.apple.com/news/?id=iwvebnw2), [December 22 to 27 in 2023 (opens in a new tab)](https://developer.apple.com/news/?id=uijoypq9), [December 23 to 27 in 2022 (opens in a new tab)](https://developer.apple.com/news/?id=xpkhwg3l). Apple hasn’t posted its 2026 dates yet (checked October 30). Approval stays Apple’s decision.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**ITMS-90725 SDK version issue**](https://app369.com/fix/itms-90725-sdk-version-ios-26/) · [**ITMS-91053 Missing API declaration**](https://app369.com/fix/itms-91053-missing-api-declaration/) · [**Xcode provisioning profile invalid or expired**](https://app369.com/fix/xcode-provisioning-profile-invalid-or-expired/) · [**ITMS-91061 missing privacy manifest**](https://app369.com/fix/itms-91061-missing-privacy-manifest/)

Questions

## **More on this rejection**

<details>

<summary>**Can I reuse a version number that was rejected? **+</summary>

Yes, if that version was never approved. Upload it again with a higher build number. If you aren’t sure which number was approved last, check the app’s version history in App Store Connect.

</details>

<details>

<summary>**Does the version in App Store Connect have to match the build? **+</summary>

Yes. Create the App Store version with the same number as CFBundleShortVersionString in the build, then add the build to that version before you submit.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)