Lo sviluppo multipiattaforma è uno dei settori più dinamici dell'ingegneria mobile. Secondo Statista (2025), il 42% degli sviluppatori mobile utilizza Flutter o React Native nei propri progetti. Canali di piattaforma, bridge e moduli nativi sono la base dell'architettura multipiattaforma.
Punti chiave
Flutter è il framework di Google per creare applicazioni native da un'unica base di codice Dart. Per interagire con il codice di piattaforma (Kotlin, Swift), Flutter utilizza Platform Channel. È un ponte attraverso il quale il codice Dart chiama funzioni native e ottiene il risultato. Lo sviluppo di app mobili multipiattaforma con Flutter è il segmento in più rapida crescita dello sviluppo mobile nel 2025–2026.
Method Channel è il canale di comunicazione principale Flutter <-> Nativo. Lato Dart: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Il messaggio viene codificato in StandardMethodCodec (binario). Lato nativo viene registrato un MethodChannel che gestisce la chiamata. MethodChannel è asincrono — il risultato viene restituito tramite Future. Alternativa: EventChannel per flussi di eventi.
BasicMessageChannel è un canale di livello inferiore per inviare stringhe/byte senza struttura "metodo-argomenti". Utilizzato per protocolli personalizzati. Tutta l'API Platform Channel passa attraverso Flutter Engine, che serializza/deserializza i messaggi.
dart:ffi (Foreign Function Interface) — chiamata diretta a funzioni C da Dart senza canali di piattaforma. FFI è più veloce di Method Channel (0 overhead di serializzazione). Utilizzato per operazioni intensive: elaborazione audio, crittografia, motori grafici. Skia è il motore di rendering di Flutter (grafica 2D). Impeller è il nuovo motore di rendering di Flutter che sostituisce Skia. Impeller compila gli shader in anticipo (Ahead-of-Time), eliminando il jank (balbettio dei fotogrammi) ai primi avvii. In IT Sectr siamo passati a Impeller nel 2025 — la differenza nella fluidità delle animazioni è immediatamente evidente.
React Native è il framework di Meta per lo sviluppo di app mobili multipiattaforma in JavaScript/TypeScript. React Native renderizza i componenti in elementi UI nativi. L'architettura si è evoluta: vecchio Bridge → nuovo Fabric con JSI.
Bridge è la vecchia architettura di React Native. Il thread JS serializza i messaggi in JSON e li invia attraverso una coda asincrona al thread nativo. Questo crea ritardi (round-trip del bridge ~1 ms). Fabric è la nuova architettura in cui i thread JS e UI nativo comunicano in modo sincrono attraverso JSI (JavaScript Interface). Fabric inietta le viste native direttamente, senza ponte. Fabric è una tappa fondamentale nello sviluppo multipiattaforma, accelerando il rendering fino a 2x.
JSI (JavaScript Interface) è un'API C++ che consente a JavaScript di chiamare direttamente funzioni native e condividere memoria. JSI ha sostituito la serializzazione JSON di Bridge. La nuova architettura basata su JSI è un risultato cruciale nello sviluppo multipiattaforma, definendo le prestazioni delle app mobili. Turbo Module è un nuovo modo di scrivere moduli nativi per React Native. A differenza dei vecchi Native Modules, Turbo Module viene caricato lazy e utilizza JSI.
Hermes è un motore JavaScript di Meta, ottimizzato per React Native. Hermes compila il codice JS in bytecode al momento della build, accelerando l'avvio delle app mobili e riducendo il consumo di memoria nello sviluppo multipiattaforma. Codegen è un generatore di codice nativo basato sui tipi TypeScript. Codegen crea automaticamente moduli nativi e binding JSI, riducendo il lavoro manuale.
| Parametro | Flutter | React Native | KMP |
|---|---|---|---|
| Linguaggio | Dart | JavaScript/TypeScript | Kotlin |
| Architettura | Skia/Impeller (rendering personalizzato) | Fabric + JSI (UI nativa) | SDK nativo (ogni modulo) |
| Ponte nativo | MethodChannel (Dart ↔ Nativo) | JSI (JS ↔ C++ ↔ Nativo) | expect/actual (Kotlin ↔ Nativo) |
| UI | Personalizzata (Skia/Impeller) | Componenti nativi (UIKit/Android Views) | UI nativa (Jetpack Compose, SwiftUI) |
| Motore di rendering | Skia o Impeller | Nativo (UIView/View) | Nativo |
Flutter renderizza tutto da solo tramite Skia/Impeller — questo dà un'unica UI su entrambe le piattaforme. React Native utilizza componenti UI nativi — sembra un'app nativa. KMP non gestisce l'UI — condivide solo la logica di business, l'UI rimane nativa. La scelta dipende dalla priorità: UI unificata (Flutter) o massima natività (React Native/KMP).
Kotlin Multiplatform (KMP) è la tecnologia JetBrains per il codice condiviso tra Android e iOS. A differenza di Flutter e React Native, KMP è un approccio alternativo allo sviluppo multipiattaforma: non sostituisce l'UI, ma condivide logica di business, richieste di rete, modelli dati e repository. L'UI rimane nativa: Jetpack Compose per Android, SwiftUI per iOS.
expect — dichiarazione di una funzione o classe nel modulo comune (commonMain) che ha un'implementazione di piattaforma. Lo sviluppo multipiattaforma con KMP utilizza expect/actual: actual è l'implementazione concreta per ogni piattaforma (androidMain, iosMain). Esempio: expect fun getDeviceId(): String — actual su Android utilizza Settings.Secure, su iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — un compilatore Kotlin in binario nativo (framework iOS). Permette di eseguire codice Kotlin su iOS senza JVM. Kotlin/Native utilizza LLVM per la compilazione, offrendo prestazioni vicine a Swift. Kotlin/JS — compilazione di Kotlin in JavaScript per progetti web e React Native.
Gli strumenti di build dello sviluppo di app mobili multipiattaforma — il ponte tra il codice e il binario finale. Gradle KTS gestisce la parte Android, CocoaPods Plugin gestisce le dipendenze iOS di KMP, XCFramework gestisce la distribuzione di librerie native.
Gradle KTS — configurazione di Gradle utilizzando Kotlin DSL invece di Groovy. KTS supporta l'autocompletamento in Android Studio, il controllo dei tipi e la sicurezza del refactoring. Esempio: plugins { id("com.android.application") } invece di apply plugin: 'com.android.application'. Raccomandato per tutti i nuovi progetti.
CocoaPods Plugin — un plugin Gradle per KMP che pubblica il modulo condiviso come pod CocoaPods. Uno sviluppatore iOS lo aggiunge tramite Podfile. XCFramework — formato di distribuzione di librerie binarie di Apple. XCFramework contiene binari per multiple architetture (arm64, x86_64) e piattaforme (iOS, macOS, watchOS). In KMP, il modulo condiviso viene esportato come XCFramework per iOS.
Domande frequenti
Flutter offre migliori prestazioni (Skia/Impeller), un'unica base di codice UI e alta stabilità nello sviluppo multipiattaforma. React Native — grande community, facile transizione dallo sviluppo web e flessibilità tramite JSI. IT Sectr raccomanda Flutter per progetti incentrati sull'UI, React Native se il progetto richiede codice nativo frequente.
Flutter invia un messaggio tramite MethodChannel lato Dart. Il messaggio viene codificato in formato binario e trasmesso al lato nativo (Kotlin/Swift), dove viene elaborato e restituisce il risultato. Tutta la comunicazione nello sviluppo di app mobili è asincrona.
expect è una dichiarazione di una funzione o classe nel codice comune che ha un'implementazione di piattaforma. actual è l'implementazione concreta per ogni piattaforma (Android/iOS). Questo è il meccanismo di KMP per la compilazione condizionale senza preprocessore.
Bridge è la vecchia architettura in cui i messaggi vengono serializzati in JSON e trasmessi in modo asincrono tramite una coda. Fabric è la nuova architettura con chiamate sincrone a funzioni native tramite JSI, eliminando i ritardi e migliorando le prestazioni delle app mobili.
Hermes è un motore JavaScript di Meta, ottimizzato per React Native. Compila JS in bytecode al momento della build, accelerando l'avvio dell'app di 2–3 volte e riducendo il consumo di memoria.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.