What happened
In late July I was shipping Onset 1.1.0. My first archive came from an Xcode 27 beta, and Apple rejected it for an unsupported SDK. So I switched to the stable Xcode 26.6 and archived again.
That build uploaded, processed and went to App Review. Then it failed with ITMS-90111.
Xcode wasn't the problem. My Mac was running the macOS 27 beta, which isn't in Apple's supported range for Xcode 26.6. An App Store archive needs a supported macOS on the Mac that builds it, as well as a supported Xcode.
The fix
The replacement build had to come from macOS 26 or from Xcode Cloud. I moved signed App Store builds to Xcode Cloud, so the release builder doesn't depend on what my Mac is running.
At the same time, code review moved to GitHub pull requests into main. I can read and merge a change from my phone, and Xcode Cloud builds the result.
Before you archive
- Archive with a release version of Xcode, not a beta.
- Check that your Mac's macOS is within Apple's supported range for that Xcode. Apple lists the ranges on its Xcode support page.
- If you run betas on your main Mac, let Xcode Cloud or another Mac make release builds.
One more from the same app
A HealthKit app that only reads data still needs NSHealthUpdateUsageDescription, not just NSHealthShareUsageDescription. Onset's update string just says it never writes to Apple Health.