altool ERROR ITMS-90022 missing required Info.plist key in CI
App Store Connect rejected the bundle with ITMS-90022 because a required Info.plist key is absent. The most common case is CFBundleIconName, which must point at an icon set in the asset catalog for App Store builds.
What this error means
altool --upload-app fails with "ERROR ITMS-90022: Invalid Bundle. The bundle ... is missing the required Info.plist key ...". The build runs locally but is rejected on upload.
ERROR ITMS-90022: "Missing required icon. The bundle does not contain an app icon for
iPhone / iPod Touch of exactly '120x120' pixels, in .png format for iOS versions >= 10.0."
ERROR ITMS-90022: "Invalid Bundle. The bundle App.app does not contain the required
Info.plist key 'CFBundleIconName'."Common causes
CFBundleIconName is not set
App Store builds must declare CFBundleIconName pointing at an AppIcon set in an asset catalog. A bare icon files list without the key is rejected.
A required icon size is missing from the asset catalog
The asset catalog does not include an icon at a size App Store mandates (for example 120x120), so the assembled bundle fails validation.
How to fix it
Add the icon key and a complete icon set
- Add the AppIcon set with every required size to the asset catalog.
- Set CFBundleIconName to the asset name (AppIcon) in Info.plist.
- Rebuild so the compiled catalog and Info.plist key are both present.
<!-- Info.plist -->
<key>CFBundleIconName</key>
<string>AppIcon</string>Verify the assembled bundle before upload
Run altool --validate-app first; it reports the same ITMS-90022 without consuming a TestFlight build slot, so you fix the plist before a real upload.
xcrun altool --validate-app -f App.ipa -t ios \
--apiKey "$ASC_KEY_ID" --apiIssuer "$ASC_ISSUER_ID"How to prevent it
- Keep a complete AppIcon set with all required sizes in the asset catalog.
- Set CFBundleIconName for App Store builds.
- Run --validate-app in CI before --upload-app.