When uploading an app from Xcode to App Store Connect, you may see an error such as CFBundleVersion must be higher than the previously uploaded version. This means the build number in the new archive is not greater than a build number that has already been uploaded.
Cause
App Store Connect uses CFBundleVersion to identify individual builds of your app. Apple defines CFBundleVersion as a machine-readable build string used to identify released or unreleased builds. If you upload the same value again, or a lower value, App Store Connect rejects the upload.
CFBundleShortVersionString = 1.2.0
CFBundleVersion = 15
For example, if build 15 already exists in App Store Connect, uploading build 15 or build 14 again can trigger this error.
Common situations
- You created a new archive without increasing the Build value in Xcode.
- A different Mac or CI environment used an older build number.
- A copied project reverted to an earlier build number.
- Info.plist or Build Settings contains an unexpected CFBundleVersion.
- You are uploading several builds under the same marketing version.
How to check the build number
In Xcode, select the app target and open General → Identity → Build. The Version field corresponds to CFBundleShortVersionString, while Build corresponds to CFBundleVersion.
You can also inspect the value inside an archived app:
/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" Payload/YourApp.app/Info.plist
Fix 1: Increase the Build number
The simplest fix is to change the Build value to a number greater than the previously uploaded build.
Previous: 15
New: 16
After changing the value, create a new archive and upload that archive to App Store Connect.
Fix 2: Update the build number with agvtool
If your project uses Apple Generic Versioning, you can increment the build number from Terminal:
xcrun agvtool next-version -all
To set a specific build number:
xcrun agvtool new-version -all 16
Fix 3: Check your CI/CD build-number logic
If you use Xcode Cloud, GitHub Actions, Fastlane, or another CI system, the build number may be overwritten during the build process. Log the final CFBundleVersion immediately before archiving or uploading and verify that the generated archive contains the expected value.
Do not confuse Version and Build
CFBundleShortVersionString is the user-facing version, while CFBundleVersion is the internal build identifier. For this error, increasing only the Version field may not help; the Build value usually needs to increase.
Important notes
After changing the Build number, do not re-upload an old archive. Create a new archive so the updated CFBundleVersion is included. If your app contains extensions or multiple targets, also verify that their bundle-version settings are consistent with your project configuration.
Summary
The “CFBundleVersion must be higher” error usually appears because the uploaded archive uses a build number that is equal to or lower than an existing build. Increase the Build value, create a new archive, and upload it again. In automated workflows, verify the CFBundleVersion in the final archive rather than relying only on the local Xcode setting.
