# ITMS-90725: risolvere «SDK version issue» con Expo

> ITMS-90725: la tua app è compilata con un SDK iOS troppo vecchio. Dal 28 aprile 2026 Apple esige Xcode 26: passa all'SDK Expo 54 o superiore e rifai la build.

Pagina originale: [ITMS-90725: risolvere «SDK version issue» con Expo](https://devoria.fr/it/blog/itms-90725-sdk-version-issue-expo)
Autore: [Mehdi Azizi](https://devoria.fr/it/mehdi-azizi)
Pubblicazione: 2026-11-04
Ultima revisione dei contenuti: 2026-11-04


ITMS-90725 è un controllo automatico di Apple sulla tua build: indica che l'app è stata compilata con un SDK iOS più vecchio del minimo richiesto. Al 15 ottobre 2026, Apple indica che dal 28 aprile 2026 le app inviate ad App Store Connect devono essere compilate con Xcode 26 o superiore e con l'SDK iOS 26. **Con Expo si decide tutto nell'immagine di build EAS: a partire dall'SDK Expo 54, l'immagine scelta di default include Xcode 26.**

Le mie app, Solys, TradaZen e Nolera, sono sull'SDK 57 di Expo, senza un'immagine forzata in eas.json: è EAS a scegliere la versione di Xcode. Ecco come controllare la tua, e cosa fare se il tuo progetto è più vecchio.

## Cosa significa l'errore ITMS-90725?

Il messaggio si intitola "ITMS-90725: SDK version issue". Riporta l'SDK con cui è stata compilata la tua app, poi il minimo richiesto e la versione di Xcode che lo contiene. Sul forum degli sviluppatori Apple, un messaggio del 2024 cominciava per esempio così: "This app was built with the iOS 16.2 SDK", seguito dal requisito dell'epoca.

L'SDK è l'insieme delle librerie di iOS con cui Xcode compila la tua app. Ogni versione di Xcode include il suo: Xcode 26 contiene l'SDK iOS 26. **Compilare con un SDK recente non vuol dire abbandonare i vecchi iPhone.** La versione minima di iOS accettata dalla tua app è un'impostazione separata, il deployment target.

Come gli altri errori ITMS, non è il rifiuto di un reviewer. Il controllo è automatico e riguarda il binario inviato.

## Quale versione di Xcode richiede Apple oggi?

Ecco cosa dicono la pagina dei [requisiti in arrivo di Apple](https://developer.apple.com/news/upcoming-requirements/) e la pagina di [invio sull'App Store](https://developer.apple.com/app-store/submitting/), consultate il 15 ottobre 2026:

| Data             | Requisito                 |
| ---------------- | ------------------------- |
| 28 aprile 2026   | Xcode 26, SDK iOS 26      |
| 9 settembre 2026 | Target minimo iOS 13      |
| Aprile 2027      | SDK iOS 27, target iOS 15 |

La regola che fa scattare ITMS-90725 è la prima. Una build fatta con Xcode 16 e l'SDK iOS 18 non viene più accettata. La seconda riguarda la versione minima supportata, non l'SDK. La terza è annunciata per aprile 2027, senza un giorno preciso sulla pagina al momento della consultazione. Apple invita già a compilare e testare con Xcode 27.

**Questo requisito si alza regolarmente, e sempre in primavera.** La stessa pagina di Apple conserva traccia di diverse scadenze: Xcode 14.1 il 25 aprile 2023, Xcode 15 il 29 aprile 2024, Xcode 26 il 28 aprile 2026. Prima di ogni primavera rileggila, invece di fidarti di un articolo, compreso questo.

## Avviso o blocco: come capire la differenza?

Prima della scadenza, ITMS-90725 arriva come avviso. Nel 2024, sul forum di Apple, l'e-mail precisava che la consegna era andata a buon fine e consigliava di correggere al prossimo invio. Dopo la scadenza, Apple scrive che le app "devono" essere compilate con l'SDK richiesto per essere inviate: la build non viene più accettata.

| Indizio         | Avviso               | Blocco           |
| --------------- | -------------------- | ---------------- |
| Data dell'invio | Prima della scadenza | Dopo la scadenza |
| Invio accettato | Sì                   | No               |
| Cosa fai        | Correggi al prossimo | Nuova build      |

**Un avviso ITMS-90725 è un conto alla rovescia.** La build passa oggi, ma la prossima, compilata allo stesso modo, verrà rifiutata dopo la data. Correggilo finché non hai la fretta di un aggiornamento urgente.

## Risolvere ITMS-90725 in un progetto Expo

Con EAS, la tua app viene compilata sui Mac di Expo, come spiego in [pubblicare un'app iOS senza Mac](https://devoria.fr/it/blog/pubblicare-app-ios-senza-mac-expo-eas). La versione di Xcode dipende dall'immagine di build. Se non specifichi `image` in eas.json, EAS usa l'alias `auto`: sceglie l'immagine in base alla tua versione dell'SDK Expo.

Ecco l'immagine associata a ogni SDK secondo la [documentazione dell'infrastruttura EAS](https://docs.expo.dev/build-reference/infrastructure/), aggiornata l'8 ottobre 2026:

| SDK Expo | Xcode dell'immagine | ITMS-90725 |
| -------- | ------------------- | ---------- |
| 57       | 26.6                | No         |
| 56       | 26.4                | No         |
| 55       | 26.2                | No         |
| 54       | 26.0                | No         |
| 53       | 16.4                | Sì         |
| 52       | 16.2                | Sì         |

1. **Guarda l'immagine usata dalla tua ultima build.** Nella pagina della build, su expo.dev, la sezione "Spin up build environment" dei log mostra il suo nome e la sua versione di Xcode.
2. **Se sei sull'SDK 54 o superiore, cerca un'immagine forzata.** Una riga `image` che punta a Xcode 16, come `macos-sequoia-15.6-xcode-16.4`, basta a provocare l'errore. La documentazione di Expo la presenta come l'immagine dell'SDK 54 per chi non vuole Xcode 26: dal 28 aprile 2026, questa scelta porta al rifiuto. Togli la riga: EAS torna all'immagine di default.
3. **Se sei sull'SDK 53 o inferiore, aggiorna l'SDK.** È la raccomandazione di Expo nel suo [annuncio del 27 aprile 2026](https://expo.dev/blog/app-store-connect-minimum-sdk-26): passare almeno all'SDK 54.
4. **Rifai la build e rimandala.** L'SDK è fissato nel binario: un aggiornamento remoto non cambia nulla.

### La soluzione d'emergenza per un vecchio SDK

Lo stesso annuncio di Expo offre un'opzione se non puoi aggiornare subito: forzare un'immagine Xcode 26 in eas.json, nel tuo profilo di produzione.

```json
{
  "build": {
    "production": {
      "ios": {
        "image": "macos-sequoia-15.6-xcode-26.2"
      }
    }
  }
}
```

Expo avverte: non tutte le versioni dell'SDK sono compatibili con Xcode 26, e il risultato dipende anche dalle tue librerie. **Consideralo una proroga, non una correzione.** Se la build fallisce in compilazione, l'unica strada resta aggiornare l'SDK.

### Aggiornare l'SDK, una versione alla volta

La [guida all'aggiornamento di Expo](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/) consiglia di salire una versione alla volta, per individuare cosa si rompe a ogni passaggio. Per passare da un SDK 53 all'SDK 54:

```bash
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
```

Se la tua cartella `ios` è generata da Expo, eliminala: verrà ricreata alla prossima build. Poi testa l'app sul tuo iPhone prima di ripetere per la versione successiva.

Una cosa da sapere prima di puntare all'ultimo SDK. Secondo la [tabella delle versioni di Expo](https://docs.expo.dev/versions/latest/), gli SDK 54 e 55 accettano iOS 15.1 e superiori, gli SDK 56 e 57 solo iOS 16.4 e superiori. **Passare all'SDK 56 esclude quindi gli iPhone rimasti su iOS 15.** L'SDK 54 basta per eliminare ITMS-90725.

## Controllare l'SDK di una build prima dell'invio

Xcode scrive nell'Info.plist di ogni build l'SDK e la versione di Xcode usati. Scarica l'IPA dalla pagina della build su expo.dev, poi lancia sul tuo Mac:

```bash
unzip -q MonApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
```

Per una build destinata all'App Store, il primo valore deve iniziare con `iphoneos26`. Il secondo codifica la versione di Xcode: su una build di Nolera fatta con Xcode 26.2 per il simulatore, ottengo `2620`. Se leggi `iphoneos18` o un valore che inizia con `16`, la build verrà rifiutata.

Se compili sul tuo Mac, conta il tuo Xcode, non l'immagine di EAS. `xcodebuild -version` mostra la versione attiva. Stessa logica in integrazione continua: la versione di Xcode dipende dalla macchina scelta. Nel 2024, sul forum di Apple, alcuni sviluppatori ricevevano ITMS-90725 perché la loro macchina GitHub Actions girava su un macOS troppo vecchio per Xcode 15.

Una volta inviata la build giusta, testala su [TestFlight](https://devoria.fr/it/blog/testflight-testare-app-iphone-prima-invio) prima di sottometterla. Una nuova build ripassa anche dalla revisione, con i tempi descritti in [tempi di approvazione App Store](https://devoria.fr/it/blog/tempi-revisione-app-store).

## Inviare la tua build senza brutte sorprese

ITMS-90725 si previene in un minuto: controlla l'immagine e l'SDK prima di ogni build di produzione. Gli altri controlli automatici richiedono lo stesso rigore, come [ITMS-90683](https://devoria.fr/it/blog/itms-90683-missing-purpose-string-expo) per i testi delle autorizzazioni. I rifiuti di un reviewer richiedono più distacco: il metodo è nella pagina [app rifiutata da Apple](https://devoria.fr/it/expertise/app-rifiutata-da-apple), e i motivi più frequenti sono in [perché Apple rifiuta un'app](https://devoria.fr/it/blog/app-rifiutata-da-apple-perche-casi-reali).

Per controllare il tuo progetto prima dell'invio, il [Review Kit](https://devoria.fr/it/kits/app-review) riunisce la mia checklist e delle skill Claude Code che rileggono il tuo progetto. Se il tuo invio è bloccato e vuoi un occhio umano, [prenota un'ora con me](https://devoria.fr/it/coaching): riprendiamo il tuo progetto in videochiamata, sul tuo schermo. E se stai preparando la tua prima uscita, [fai la tua diagnosi gratuita](https://devoria.fr/it/diagnostic): rimette in ordine i passaggi e ti invia la mia checklist anti-rifiuto Apple.

## Domande frequenti

### ITMS-90725 impedisce di pubblicare la mia app?

Dopo la scadenza fissata da Apple, sì: la build non viene più accettata e bisogna compilarne una nuova. Prima della scadenza è un avviso: la build passa, ma la successiva verrà rifiutata se compilata allo stesso modo.

### Bisogna abbandonare i vecchi iPhone per compilare con l'SDK iOS 26?

No. L'SDK di compilazione e la versione minima di iOS sono due impostazioni distinte. Con Expo, è la tua versione dell'SDK Expo a fissare questo minimo: iOS 15.1 per gli SDK 54 e 55, iOS 16.4 per gli SDK 56 e 57.

### Si può risolvere ITMS-90725 con un aggiornamento remoto?

No. L'SDK viene scritto nel binario al momento della compilazione. Un aggiornamento remoto cambia solo il JavaScript e le risorse. Bisogna rifare una build con Xcode 26 e rimandarla.

### Come sapere quale versione di Xcode usa EAS?

Apri i log della tua build su expo.dev, sezione "Spin up build environment". Il nome dell'immagine indica la versione di Xcode, per esempio `macos-tahoe-26.5-xcode-26.6`. L'elenco completo è nella documentazione dell'infrastruttura EAS.

### Cosa cambierà il requisito di aprile 2027?

Secondo la pagina di invio di Apple, bisognerà compilare con l'SDK iOS 27 e supportare almeno iOS 15. Lato EAS, Expo prevede un'immagine con Xcode 27 per il suo futuro SDK 58: controlla l'elenco delle immagini di build prima di compilare. Rileggi la pagina di Apple in primavera per conoscere il giorno esatto.


## Il tuo progetto

[Review Kit](https://devoria.fr/it/kits/app-review): La mia checklist per la review dell'App Store, i rifiuti di Apple che ho risolto, quella di Google Play e tre skill per Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/it/kits/ios): Crea la tua app iPhone e Android con Claude Code: il codice di partenza delle mie app, il percorso fino agli store e tutti i kit. 99 €.

[Diagnosi: cosa ti separa dalla tua app per iPhone](https://devoria.fr/it/diagnostic): 7 domande, 60 secondi: scopri cosa ti blocca davvero nel pubblicare la tua app per iPhone, il tuo percorso in 4 tappe e il kit giusto per te.
