Tworzenie międzyplatformowe to jedna z najbardziej dynamicznie rozwijających się dziedzin inżynierii mobilnej. Według Statista (2025), 42% programistów mobilnych używa Fluttera lub React Native w swoich projektach. Kanały platformowe, mosty i moduły natywne są podstawą architektury międzyplatformowej.
Kluczowe punkty
Flutter to framework Google do tworzenia natywnych aplikacji z pojedynczej bazy kodu Dart. Do interakcji z kodem platformowym (Kotlin, Swift) Flutter używa Platform Channel. To most, przez który kod Dart wywołuje funkcje natywne i otrzymuje wynik. Międzyplatformowe tworzenie aplikacji mobilnych z Flutterem to najszybciej rozwijający się segment tworzenia aplikacji mobilnych w latach 2025–2026.
Method Channel to główny kanał komunikacji Flutter <-> Natywny. Po stronie Dart: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). Wiadomość jest kodowana w StandardMethodCodec (binarny). Po stronie natywnej rejestrowany jest MethodChannel i obsługuje wywołanie. MethodChannel jest asynchroniczny — wynik jest zwracany przez Future. Alternatywa: EventChannel dla strumieni zdarzeń.
BasicMessageChannel to kanał niższego poziomu do wysyłania ciągów/bajtów bez struktury "metoda-argumenty". Używany do niestandardowych protokołów. Całe API Platform Channel przechodzi przez Flutter Engine, który serializuje/deserializuje wiadomości.
dart:ffi (Foreign Function Interface) — bezpośrednie wywołanie funkcji C z Dart bez kanałów platformowych. FFI jest szybszy niż Method Channel (0 narzutu na serializację). Używany do operacji wymagających wydajności: przetwarzanie dźwięku, kryptografia, silniki graficzne. Skia to silnik renderujący Fluttera (grafika 2D). Impeller to nowy silnik renderujący Fluttera, który zastępuje Skię. Impeller kompiluje shadery z wyprzedzeniem (Ahead-of-Time), eliminując jank (zacięcia klatek) przy pierwszych uruchomieniach. W IT Sectr przeszliśmy na Impeller w 2025 — różnica w płynności animacji jest natychmiast zauważalna.
React Native to framework Meta do międzyplatformowego tworzenia aplikacji mobilnych w JavaScript/TypeScript. React Native renderuje komponenty do natywnych elementów UI. Architektura ewoluowała: stary Bridge → nowy Fabric z JSI.
Bridge to stara architektura React Native. Wątek JS serializuje wiadomości do JSON i wysyła przez asynchroniczną kolejkę do wątku natywnego. To powoduje opóźnienia (round-trip mostu ~1 ms). Fabric to nowa architektura, w której wątki JS i natywnego UI komunikują się synchronicznie przez JSI (JavaScript Interface). Fabric wstrzykuje natywne widoki bezpośrednio, bez mostu. Fabric to kluczowy kamień milowy w tworzeniu międzyplatformowym, przyspieszający renderowanie do 2x.
JSI (JavaScript Interface) to API C++, które pozwala JavaScript bezpośrednio wywoływać funkcje natywne i współdzielić pamięć. JSI zastąpił serializację JSON Bridge. Nowa architektura oparta na JSI to kluczowe osiągnięcie w tworzeniu międzyplatformowym, określające wydajność aplikacji mobilnych. Turbo Module to nowy sposób pisania natywnych modułów dla React Native. W przeciwieństwie do starych Native Modules, Turbo Module jest ładowany leniwie i używa JSI.
Hermes to silnik JavaScript od Meta, zoptymalizowany dla React Native. Hermes kompiluje kod JS do bajtkodu na etapie budowania, przyspieszając uruchamianie aplikacji mobilnych i zmniejszając zużycie pamięci w tworzeniu międzyplatformowym. Codegen to generator kodu natywnego oparty na typach TypeScript. Codegen automatycznie tworzy natywne moduły i wiązania JSI, zmniejszając ręczną pracę.
| Parametr | Flutter | React Native | KMP |
|---|---|---|---|
| Język | Dart | JavaScript/TypeScript | Kotlin |
| Architektura | Skia/Impeller (niestandardowe renderowanie) | Fabric + JSI (natywne UI) | Natywne SDK (każdy moduł) |
| Most natywny | MethodChannel (Dart ↔ Natywny) | JSI (JS ↔ C++ ↔ Natywny) | expect/actual (Kotlin ↔ Natywny) |
| UI | Niestandardowe (Skia/Impeller) | Natywne komponenty (UIKit/Android Views) | Natywne UI (Jetpack Compose, SwiftUI) |
| Silnik renderujący | Skia lub Impeller | Natywny (UIView/View) | Natywny |
Flutter renderuje wszystko sam przez Skię/Impeller — to daje jednolite UI na obu platformach. React Native używa natywnych komponentów UI — wygląda jak natywna aplikacja. KMP nie zajmuje się UI — dzieli tylko logikę biznesową, UI pozostaje natywne. Wybór zależy od priorytetu: jednolite UI (Flutter) lub maksymalna natywność (React Native/KMP).
Kotlin Multiplatform (KMP) to technologia JetBrains do współdzielenia kodu między Androidem a iOS. W przeciwieństwie do Fluttera i React Native, KMP to alternatywne podejście do tworzenia międzyplatformowego: nie zastępuje UI, ale dzieli logikę biznesową, żądania sieciowe, modele danych i repozytoria. UI pozostaje natywne: Jetpack Compose dla Androida, SwiftUI dla iOS.
expect — deklaracja funkcji lub klasy w wspólnym module (commonMain), która ma implementację platformową. Tworzenie międzyplatformowe z KMP używa expect/actual: actual to konkretna implementacja dla każdej platformy (androidMain, iosMain). Przykład: expect fun getDeviceId(): String — actual na Androidzie używa Settings.Secure, na iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — kompilator Kotlin do natywnego pliku binarnego (framework iOS). Pozwala uruchamiać kod Kotlin na iOS bez JVM. Kotlin/Native używa LLVM do kompilacji, co daje wydajność zbliżoną do Swift. Kotlin/JS — kompilacja Kotlin do JavaScript dla projektów webowych i React Native.
Narzędzia budowania międzyplatformowego tworzenia aplikacji mobilnych — most między kodem a końcowym plikiem binarnym. Gradle KTS zarządza częścią Android, CocoaPods Plugin zarządza zależnościami iOS KMP, XCFramework zarządza dystrybucją natywnych bibliotek.
Gradle KTS — konfiguracja Gradle przy użyciu Kotlin DSL zamiast Groovy. KTS wspiera autouzupełnianie w Android Studio, sprawdzanie typów i bezpieczeństwo refaktoryzacji. Przykład: plugins { id("com.android.application") } zamiast apply plugin: 'com.android.application'. Zalecane dla wszystkich nowych projektów.
CocoaPods Plugin — wtyczka Gradle dla KMP, która publikuje współdzielony moduł jako pod CocoaPods. Deweloper iOS dodaje go przez Podfile. XCFramework — format dystrybucji bibliotek binarnych Apple. XCFramework zawiera pliki binarne dla wielu architektur (arm64, x86_64) i platform (iOS, macOS, watchOS). W KMP współdzielony moduł jest eksportowany jako XCFramework dla iOS.
Często zadawane pytania
Flutter oferuje lepszą wydajność (Skia/Impeller), jednolitą bazę kodu UI i wysoką stabilność w tworzeniu międzyplatformowym. React Native — ogromna społeczność, łatwe przejście z tworzenia stron internetowych i elastyczność dzięki JSI. IT Sectr zaleca Fluttera dla projektów skoncentrowanych na UI, React Native jeśli projekt wymaga częstego kodu natywnego.
Flutter wysyła wiadomość przez MethodChannel po stronie Dart. Wiadomość jest kodowana do formatu binarnego i przesyłana do strony natywnej (Kotlin/Swift), gdzie jest przetwarzana i zwraca wynik. Cała komunikacja w tworzeniu aplikacji mobilnych jest asynchroniczna.
expect to deklaracja funkcji lub klasy we wspólnym kodzie, która ma implementację platformową. actual to konkretna implementacja dla każdej platformy (Android/iOS). To mechanizm KMP do kompilacji warunkowej bez preprocesora.
Bridge to stara architektura, w której wiadomości są serializowane do JSON i przesyłane asynchronicznie przez kolejkę. Fabric to nowa architektura z synchronicznymi wywołaniami funkcji natywnych przez JSI, eliminująca opóźnienia i poprawiająca wydajność aplikacji mobilnych.
Hermes to silnik JavaScript od Meta, zoptymalizowany dla React Native. Kompiluje JS do bajtkodu na etapie budowania, przyspieszając uruchamianie aplikacji 2–3 razy i zmniejszając zużycie pamięci.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.