ITMS-90725: fix “SDK version issue” with Expo
By Mehdi Azizi
Published , 7 min
ITMS-90725 means your app was built with an iOS SDK that's too old. Since April 28, 2026, Apple requires Xcode 26: move to Expo SDK 54 or later and rebuild.
ITMS-90725 is an automated check Apple runs on your build. It says your app was compiled with an iOS SDK older than the required minimum. As of October 15, 2026, Apple states that since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later and the iOS 26 SDK. With Expo, it all comes down to the EAS build image: starting with Expo SDK 54, the default image ships with Xcode 26.
My apps, Solys, TradaZen and Nolera, are on Expo SDK 57, with no image forced in eas.json: EAS picks the Xcode version itself. Here's how to check yours, and what to do if your project is older.
What does the ITMS-90725 error mean?
The message is titled "ITMS-90725: SDK version issue". It gives the SDK your app was built with, then the required minimum and the Xcode version that includes it. On Apple's developer forums, a 2024 message started like this, for example: "This app was built with the iOS 16.2 SDK", followed by the requirement at the time.
The SDK is the set of iOS libraries Xcode uses to compile your app. Each Xcode version ships its own: Xcode 26 includes the iOS 26 SDK. Building with a recent SDK doesn't mean dropping older iPhones. The minimum iOS version your app supports is a separate setting, the deployment target.
Like other ITMS errors, this isn't a rejection from a reviewer. The check is automated and applies to the binary you uploaded.
Which Xcode version does Apple require today?
Here's what Apple's upcoming requirements page and App Store submission page say, checked on October 15, 2026:
| Date | Requirement |
|---|---|
| April 28, 2026 | Xcode 26, iOS 26 SDK |
| September 9, 2026 | iOS 13 minimum target |
| April 2027 | iOS 27 SDK, iOS 15 target |
The rule that triggers ITMS-90725 is the first one. A build made with Xcode 16 and the iOS 18 SDK is no longer accepted. The second one is about the minimum target version, not the SDK. The third is announced for April 2027, with no exact day on the page when I checked. Apple already encourages you to build and test with Xcode 27.
This requirement goes up regularly, and always in the spring. The same Apple page keeps a record of several deadlines: Xcode 14.1 on April 25, 2023, Xcode 15 on April 29, 2024, Xcode 26 on April 28, 2026. Before each spring, reread it instead of relying on an article, this one included.
Warning or block: how do you tell the difference?
Before the deadline, ITMS-90725 shows up as a warning. In 2024, on Apple's forums, the email said the delivery had succeeded and advised fixing it on the next upload. After the deadline, Apple writes that apps "must" be built with the required SDK to be uploaded: the build is no longer accepted.
| Clue | Warning | Block |
|---|---|---|
| Upload date | Before the deadline | After the deadline |
| Upload accepted | Yes | No |
| What you do | Fix on the next one | New build |
An ITMS-90725 warning is a countdown. The build goes through today, but the next one, built the same way, will be rejected after the date. Fix it while you're not under pressure from an urgent update.
Fixing ITMS-90725 in an Expo project
With EAS, your app is compiled on Expo's Macs, as I explain in publishing an iOS app without a Mac. The Xcode version depends on the build image. If you don't set image in eas.json, EAS uses the auto alias: it picks the image based on your Expo SDK version.
Here's the image tied to each SDK according to the EAS infrastructure documentation, updated October 8, 2026:
| Expo SDK | Image Xcode | ITMS-90725 |
|---|---|---|
| 57 | 26.6 | No |
| 56 | 26.4 | No |
| 55 | 26.2 | No |
| 54 | 26.0 | No |
| 53 | 16.4 | Yes |
| 52 | 16.2 | Yes |
- Check the image used by your last build. On the build page in expo.dev, the "Spin up build environment" section of the logs shows its name and its Xcode version.
- If you're on SDK 54 or later, look for a forced image. An
imageline pointing to Xcode 16, likemacos-sequoia-15.6-xcode-16.4, is enough to cause the error. Expo's documentation lists it as the SDK 54 image for people who don't want Xcode 26: since April 28, 2026, that choice leads to a rejection. Remove the line: EAS goes back to the default image. - If you're on SDK 53 or earlier, upgrade your SDK. That's Expo's recommendation in its April 27, 2026 announcement: move to at least SDK 54.
- Rebuild and upload again. The SDK is baked into the binary: an over-the-air update changes nothing.
The workaround for an old SDK
The same Expo announcement gives an option if you can't upgrade right away: force an Xcode 26 image in eas.json, in your production profile.
{
"build": {
"production": {
"ios": {
"image": "macos-sequoia-15.6-xcode-26.2"
}
}
}
}
Expo warns that not every SDK version is compatible with Xcode 26, and the result also depends on your libraries. Treat it as a reprieve, not a fix. If the build fails to compile, upgrading the SDK is the only way out.
Upgrading your SDK, one version at a time
Expo's upgrade guide recommends going up one version at a time, so you can spot what breaks at each step. To go from SDK 53 to SDK 54:
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
If your ios folder is generated by Expo, delete it: it'll be recreated on the next build. Then test the app on your iPhone before repeating for the next version.
One thing to know before aiming for the latest SDK. According to Expo's versions table, SDKs 54 and 55 support iOS 15.1 and later, while SDKs 56 and 57 only support iOS 16.4 and later. So moving to SDK 56 drops iPhones still on iOS 15. SDK 54 is enough to clear ITMS-90725.
Checking a build's SDK before uploading
Xcode writes the SDK and Xcode version used into each build's Info.plist. Download the IPA from the build page on expo.dev, then run this on your Mac:
unzip -q MonApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
For an App Store build, the first value must start with iphoneos26. The second encodes the Xcode version: on a Nolera simulator build made with Xcode 26.2, I get 2620. If you see iphoneos18 or a value starting with 16, the build will be rejected.
If you build on your own Mac, your Xcode is what counts, not the EAS image. xcodebuild -version shows the active version. Same logic in continuous integration: the Xcode version depends on the machine you pick. In 2024, on Apple's forums, developers were getting ITMS-90725 because their GitHub Actions runner was on a macOS too old for Xcode 15.
Once the right build is uploaded, test it in TestFlight before submitting. A new build also goes through review again, with the timelines described in App Store review time.
Uploading your build without nasty surprises
ITMS-90725 takes a minute to prevent: check the image and the SDK before every production build. Other automated checks call for the same rigor, like ITMS-90683 for permission strings. Rejections from a reviewer take more stepping back: the process is on the app rejected by Apple page, and the most common reasons are in why Apple rejects an app.
To check your submission before uploading, the Review Kit bundles my checklist and Claude Code skills that review your project. If your upload is stuck and you want a human eye on it, book an hour with me: we go through your project on a video call, on your screen. And if you're preparing your first launch, take the free diagnostic: it puts the steps in order and sends you my checklist for avoiding Apple rejections.
Frequently asked questions
Does ITMS-90725 stop me from publishing my app?
After Apple's deadline, yes: the build is no longer accepted and you need to compile a new one. Before the deadline, it's a warning: the build goes through, but the next one will be rejected if it's built the same way.
Do I have to drop older iPhones to build with the iOS 26 SDK?
No. The build SDK and the minimum iOS version are two separate settings. With Expo, your Expo SDK version sets that minimum: iOS 15.1 for SDKs 54 and 55, iOS 16.4 for SDKs 56 and 57.
Can I fix ITMS-90725 with an over-the-air update?
No. The SDK is written into the binary at compile time. An over-the-air update only changes the JavaScript and assets. You need to rebuild with Xcode 26 and upload again.
How do I know which Xcode version EAS uses?
Open your build logs on expo.dev, in the "Spin up build environment" section. The image name shows the Xcode version, for example macos-tahoe-26.5-xcode-26.6. The full list is in the EAS infrastructure documentation.
What will the April 2027 requirement change?
According to Apple's submission page, you'll need to build with the iOS 27 SDK and target at least iOS 15. On the EAS side, Expo plans an image with Xcode 27 for its upcoming SDK 58: check the list of build images before building. Reread Apple's page in the spring to get the exact day.

