Blog

OTA updates con Expo EAS: aggiorna la tua app React Native senza passare per gli store

Come funzionano gli OTA update con Expo EAS Update: aggiorna la tua app React Native in produzione in minuti, senza review Apple o Google Play. Guida pratica.

5 minTeam Sydus20 febbraio 2026

La review di Apple dura in media 1-3 giorni, ma può arrivare a una settimana se l'app viene selezionata per revisione manuale o se viene rifiutata alla prima submission. Per un bug critico in produzione, aspettare 3-7 giorni non è un'opzione. Gli OTA update risolvono esattamente questo problema.

Cos'è un OTA update

OTA sta per Over-The-Air. In un'app React Native, il codice applicativo è diviso in due parti: il codice nativo (compilato in binario, incluso nel file IPA o APK distribuito agli store) e il bundle JavaScript (il codice che scrivi ogni giorno con React Native, che viene interpretato a runtime dal motore JavaScript).

Gli OTA update funzionano aggiornando solo il bundle JavaScript, senza toccare il codice nativo. Questo significa che puoi deployare una nuova versione del bundle sui server di Expo, e la prossima volta che l'app viene aperta, scarica e applica automaticamente l'aggiornamento.

Il risultato: da una push su Git a un fix in produzione in meno di 10 minuti, senza passare da nessuno store.

Come funziona Expo EAS Update

Expo Application Services (EAS) è la piattaforma cloud di Expo che include build, distribuzione e aggiornamenti. EAS Update è il servizio specifico per gli OTA.

Flusso tecnico:

  1. Fai eas update --branch production --message "Fix crash home screen" nel tuo terminale
  2. Expo compila il bundle JavaScript localmente e lo carica sui CDN di Expo
  3. Alla prossima apertura dell'app, il client EAS Update integrato nell'app controlla se ci sono aggiornamenti disponibili per il branch configurato
  4. Se trovato, scarica il bundle in background mentre l'app è già in uso
  5. Alla successiva apertura (non quella corrente), l'app usa il nuovo bundle

Il comportamento di quando applicare l'update è configurabile: puoi scegliere di applicarlo alla prossima apertura, forzarlo immediatamente (con un reload dell'app), o mostrare un avviso all'utente.

Cosa puoi e non puoi aggiornare via OTA

Puoi aggiornare via OTA:

  • Qualsiasi logica JavaScript/TypeScript
  • Componenti React Native (UI, layout, stili)
  • Testi, immagini e asset inclusi nel bundle
  • Librerie JavaScript pure (quelle senza codice nativo)
  • Configurazioni di API endpoint, feature flags
  • Fix di bug nella logica applicativa

Non puoi aggiornare via OTA:

  • Dipendenze native (librerie con codice nativo: react-native-camera, react-native-maps, ecc.)
  • Permessi app (richiedono un aggiornamento dello store)
  • Configurazioni native come app.json o Info.plist/AndroidManifest.xml
  • Versione del runtime Hermes/JSC

Il modo per verificare se un aggiornamento può essere distribuito via OTA: se hai cambiato solo file .ts, .tsx, .js, .json di configurazione applicativa e asset statici, probabilmente è OTA-compatibile. Se hai modificato package.json aggiungendo dipendenze native, serve un nuovo build degli store.

Configurazione base in un progetto Expo

# Installa EAS CLI
npm install -g eas-cli

# Login al tuo account Expo
eas login

# Configura EAS nel progetto
eas update:configure

Nel file eas.json, configura i profili di update:

{
  "cli": {
    "version": ">= 7.0.0"
  },
  "build": {
    "production": {
      "channel": "production"
    },
    "preview": {
      "channel": "preview"
    }
  }
}

In app.json, abilita gli update:

{
  "expo": {
    "updates": {
      "url": "https://u.expo.dev/[your-project-id]",
      "checkAutomatically": "ON_LOAD",
      "fallbackToCacheTimeout": 0
    },
    "runtimeVersion": {
      "policy": "appVersion"
    }
  }
}

Il runtimeVersion è cruciale: definisce la compatibilità tra bundle OTA e versione dell'app. Un bundle compilato per runtime version 1.0.0 viene applicato solo alle app con lo stesso runtime, evitando crash da incompatibilità.

Use case ideali in produzione

Hotfix urgenti: un crash che colpisce il 5% degli utenti su un flusso specifico. Identificato dal crash reporting (Sentry, Bugsnag), fix commesso, OTA deployato in 10 minuti.

Aggiornamento contenuti: il marketing ha bisogno di cambiare il testo di una promozione, aggiornare le immagini di un banner o modificare i valori di un form. Nessuna review necessaria.

Feature flag rollout: la nuova funzionalità è già nel codice ma nascosta da un flag. Attivare il flag via OTA consente un rollout graduale (prima al 5% degli utenti, poi al 100%) senza build separati.

A/B testing rapido: varianti UI testate via OTA su branch separati, con analytics per misurare la conversione prima di decidere quale tenere.

Gli OTA update non eliminano la necessità di rilasci sugli store: ogni nuova dipendenza nativa, ogni cambio di permessi, ogni aggiornamento significativo delle funzionalità richiede comunque un ciclo di review. Ma per tutto il resto, EAS Update è uno dei vantaggi competitivi più concreti dello stack React Native + Expo rispetto allo sviluppo nativo tradizionale.

Tag

ExpoEASOTAReact-Nativeaggiornamenti

Domande frequenti

Hai ancora dubbi?

Apple permette gli OTA update?

Sì, con limitazioni precise. Apple consente aggiornamenti OTA del codice JavaScript (bundle) purché non cambino le funzionalità principali dell'app o aggiungano feature significative che avrebbero richiesto una review. In pratica: fix di bug, aggiornamento testi, piccole modifiche UI e correzioni di logica sono permessi. Aggiungere un intero flusso nuovo o cambiare la natura dell'app viola le linee guida. Expo EAS Update è costruito per rispettare questi limiti.

Gli OTA update funzionano anche offline?

No: per ricevere un aggiornamento OTA l'app deve essere connessa a internet all'avvio. Se l'utente è offline, l'app continua a usare l'ultima versione del bundle disponibile localmente. Il download avviene in background: tipicamente l'utente vede l'aggiornamento alla seconda apertura dell'app dopo il deploy, non alla prima.

EAS Update è gratuito?

Expo EAS ha un piano gratuito con 1.000 update al mese e 1 GB di banda. Per app con più utenti o aggiornamenti frequenti, i piani a pagamento partono da 29$/mese (Production) con 10.000 update/mese. Per la maggior parte delle app B2B con basi utenti limitate, il piano gratuito è sufficiente per mesi o anni.