Aplikacja mobilna natywna czy wieloplatformowa?
Według Mesterséges Intelligencia Központ Kft., firmy programistycznej z Budapesztu, aplikacja natywna jest potrzebna wtedy, gdy intensywnie korzysta z urządzenia; jeśli na obu platformach potrzebne są te same funkcje, jedną wspólną bazę kodu łatwiej utrzymać.
W skrócie: decyzja zależy od funkcji, a nie od mody: jak głęboko aplikacja musi sięgać do urządzenia, jakiej wydajności potrzebuje i kto będzie ją utrzymywał przez lata. Jeśli obecność w sklepie i głęboki dostęp do urządzenia nie są ważne, może wystarczyć aplikacja webowa (PWA). Niezależnie od wybranej drogi znaczną część pracy stanowią backend, zasady sklepów i regularne aktualizacje systemów operacyjnych.
Co oznacza aplikacja natywna, wieloplatformowa i webowa?
Aplikację mobilną można zbudować na trzy sposoby: osobno dla każdej platformy, za pomocą jej własnych narzędzi; z jednej wspólnej bazy kodu, która kompiluje się na obie platformy; albo w technologii webowej, z działaniem w przeglądarce. Każda z tych dróg daje działającą aplikację; różnica polega na dostępie, utrzymaniu i na tym, według czyich zasad aplikacja musi być aktualizowana.
Aplikacja natywna
W przypadku aplikacji natywnej wersje na iOS i na Androida powstają osobno, we własnym języku i za pomocą własnych narzędzi interfejsu danej platformy. Na iOS oznacza to dziś zazwyczaj język Swift i SwiftUI: według Apple SwiftUI dzięki składni deklaratywnej i w oparciu o język Swift umożliwia budowanie interfejsu użytkownika na wszystkich platformach Apple (Apple: SwiftUI). Na Androidzie są to Kotlin i Jetpack Compose: Google nazywa Jetpack Compose zalecanym, nowoczesnym zestawem narzędzi Androida do budowania natywnego interfejsu (Android Developers: Jetpack Compose) i przy nowej aplikacji na Androida zaleca rozpoczęcie od Kotlina (Android Developers: Kotlin-first). Zaletą drogi natywnej jest to, że każda nowa możliwość platformy jest bezpośrednio dostępna od pierwszego dnia; wadą jest konieczność tworzenia i utrzymywania dwóch baz kodu.
Frameworki wieloplatformowe
Dzięki frameworkom wieloplatformowym aplikacja na iOS i na Androida powstaje z jednej wspólnej bazy kodu. Cztery popularne podejścia:
- Flutter: framework oparty na języku Dart. Według dokumentacji Flutter sam implementuje każdy element interfejsu, zamiast korzystać z elementów systemowych, a do renderowania używa silnika o nazwie Impeller; własny kod platformy można wywoływać przez tzw. kanał platformy (platform channel) (Flutter: Architectural overview).
- React Native: oparty na React i JavaScripcie; jak ujmuje to sam projekt, kod pisze się w JavaScripcie, ale renderuje się go natywnie, ponieważ podstawowe komponenty są odwzorowywane na natywne elementy interfejsu platformy (React Native). Od wersji 0.76 domyślna jest tzw. nowa architektura (New Architecture), która zastępuje asynchroniczny most interfejsem JavaScript Interface (JSI) (React Native: New Architecture).
- Kotlin Multiplatform: technologia open source firmy JetBrains, która pozwala współdzielić kod między Androidem, iOS, komputerami stacjonarnymi, przeglądarką i serwerem. Współdzielić można tylko logikę biznesową, z natywnym interfejsem, albo, dzięki Compose Multiplatform, także interfejs (Kotlin: Kotlin Multiplatform). Według dokumentacji Kotlina Compose Multiplatform ma poziom stabilny (Stable) również na iOS (Kotlin: stability of supported platforms, sprawdzono 17 października 2026 r.).
- .NET MAUI: framework Microsoftu oparty na C# i XAML, za pomocą którego z jednej wspólnej bazy kodu można tworzyć aplikacje na Androida, iOS, macOS i Windows; jest następcą Xamarin.Forms. Do kompilowania aplikacji na iOS i macOS potrzebny jest Mac (Microsoft Learn: What is .NET MAUI?).
Progresywna aplikacja webowa (PWA)
PWA to aplikacja webowa działająca w przeglądarce, którą można zainstalować na ekranie głównym i która dzięki stopniowemu rozszerzaniu funkcji (progressive enhancement) zapewnia bardziej niezawodne działanie. Według podsumowania web.dev aplikacje platformowe są najmocniejsze pod względem możliwości, a aplikacje webowe pod względem zasięgu: jedna baza kodu dociera do każdego, na dowolnym urządzeniu (web.dev: Progressive Web Apps). Na iOS i iPadOS od wersji 16.4 także aplikacja webowa dodana do ekranu głównego może prosić o zgodę na powiadomienia push (WebKit: Web Push for Web Apps). Ważne ograniczenie: zgodnie z pkt 4.2 wytycznych App Store aplikacja musi oferować więcej niż przepakowana strona internetowa, dlatego nie warto wprowadzać do sklepu strony internetowej jedynie opakowanej w aplikację (Apple: App Store Review Guidelines).
Porównanie w jednej tabeli
| Kryterium | Natywna (Swift, Kotlin) | Wieloplatformowa (Flutter, React Native, KMP, .NET MAUI) | PWA |
|---|---|---|---|
| Wydajność | można ją optymalizować bezpośrednio narzędziami platformy | części wymagające dużej mocy obliczeniowej można przenieść do kodu natywnego | wyznaczają ją przeglądarka i technologia webowa |
| Dostęp do urządzenia | każda funkcja platformy, od pierwszego dnia | przez framework lub wtyczkę; nowa funkcja później albo z dodatkowym kodem natywnym | ograniczony do interfejsów webowych obsługiwanych przez przeglądarkę |
| Wygląd i wrażenia | dokładnie własne elementy platformy | we Flutterze elementy rysowane samodzielnie, w React Native elementy natywne | jak strona internetowa, zależy od przeglądarki |
| Współdzielenie kodu | brak, dwie osobne bazy kodu | wspólna logika, a zazwyczaj także interfejs | jedna baza kodu na wszystkie urządzenia |
| Zespół | osobne kompetencje w zakresie iOS i Androida | jeden zespół, ale potrzebna jest też wiedza o warstwach natywnych | zespół programistów webowych |
| Utrzymanie | dwie bazy kodu nadążają za regularnymi zmianami platform | jedna baza kodu plus własne aktualizacje frameworka | brak wydań w sklepie, trzeba śledzić zmiany przeglądarek |
| Rozmiar aplikacji | korzysta z własnych bibliotek systemu | do aplikacji trafia także silnik frameworka | brak pakietu instalacyjnego, przeglądarka korzysta z pamięci podręcznej |
| Obecność w sklepie | tak | tak | niewymagana; po opakowaniu na potrzeby sklepu obowiązuje ograniczenie z pkt 4.2 |
Dokumentacja Fluttera mówi to wprost: pakiet aplikacji Flutter jest samodzielny i zawiera cały kod oraz wszystkie zasoby potrzebne do jej działania, dlatego jego rozmiar może mieć znaczenie (Flutter: Measuring your app's size). W praktyce ta różnica rzadko przesądza o wyborze, ale warto o niej wiedzieć, jeśli grupa docelowa korzysta z aplikacji na starszych urządzeniach lub przy słabym połączeniu.
Kiedy co pasuje?
Natywna, jeśli
- aplikacja intensywnie korzysta z urządzenia: aparat, czujniki, Bluetooth, zadania w tle;
- ma duże wymagania wydajnościowe, na przykład przetwarzanie obrazu lub dźwięku w czasie rzeczywistym, złożona animacja;
- trzeba od razu wykorzystać najnowsze możliwości platformy;
- aplikacja jest potrzebna tylko na jedną platformę albo obie wersje znacznie się różnią.
Wieloplatformowa, jeśli
- na obu platformach potrzebne są te same funkcje i ważne jest, aby zmiany pojawiały się jednocześnie;
- aplikacja składa się głównie z formularzy, list, prezentacji danych i powiadomień, jak większość aplikacji biznesowych;
- aplikację będzie długoterminowo utrzymywał jeden zespół;
- firma już używa języka danego frameworka, na przykład znajomość React z projektów webowych wskazuje na React Native, a doświadczenie w .NET wskazuje na .NET MAUI.
PWA lub aplikacja webowa, jeśli
- użytkownicy nie szukają aplikacji w sklepie, lecz trafiają do niej z linku lub ze strony internetowej;
- głęboki dostęp do urządzenia nie jest potrzebny;
- aplikacja ma działać tak samo na komputerze i na telefonie;
- szybka aktualizacja bez weryfikacji w sklepie jest ważniejsza niż funkcje platformy.
Także tutaj granice nie są ostre. W Kotlin Multiplatform na przykład logika biznesowa może być wspólna, a interfejs pozostaje natywny; we Flutterze i w React Native krytyczną część można też napisać w kodzie natywnym. Gra na naszej stronie internetowej działa jako aplikacja webowa: uruchamia się w przeglądarce bez instalacji, tak samo na komputerze i na telefonie. O drodze webowej piszemy na stronie Tworzenie stron internetowych i aplikacji webowych.
Backend i panel administracyjny
Aplikacja mobilna rzadko funkcjonuje samodzielnie. Gdy tylko ma konta użytkowników, współdzielone dane lub powiadomienia, musi za nią stać serwer: tam znajdują się konta, dane i uprawnienia i stamtąd wysyłane są powiadomienia. Powiadomienia push backend wysyła zazwyczaj za pośrednictwem przeznaczonej do tego usługi; Firebase Cloud Messaging to na przykład wieloplatformowe rozwiązanie do przesyłania wiadomości, w którym zaufane środowisko serwerowe tworzy i wysyła wiadomości do aplikacji na urządzenia Apple, aplikacji na Androida i aplikacji webowych (Firebase: Cloud Messaging).
Panel administracyjny to pulpit sterowniczy backendu: z poziomu przeglądarki edytuje się w nim treści i zarządza użytkownikami oraz ustawieniami, aby codzienne zmiany nie wymagały programisty. Tu podłączamy też istniejące systemy firmy, takie jak system CRM, ewidencja magazynowa lub program do fakturowania, aby aplikacja pracowała na tych samych danych co reszta firmy. Jeśli takiego systemu jeszcze nie ma, zbudujemy go jako oprogramowanie na zamówienie. Wybór między rozwiązaniem natywnym a wieloplatformowym nie ma wpływu na backend: ten sam serwer może obsługiwać zarówno aplikację natywną, jak i aplikację zbudowaną we Flutterze.
Publikacja w sklepach: na co zwrócić uwagę w październiku 2026 r.?
Zasady sklepów często się zmieniają, dlatego poniższe punkty podajemy z datą (sprawdzono 17 października 2026 r.).
App Store (Apple)
- Wytyczne dotyczące weryfikacji: App Store Review Guidelines zostały ostatnio zaktualizowane 16 października 2026 r. Zgodnie z pkt 2.1 należy zgłosić kompletną wersję, gotową do weryfikacji; jeśli aplikacja wymaga logowania, trzeba udostępnić konto demonstracyjne, a backend musi działać także w trakcie weryfikacji. Zgodnie z pkt 5.1.1 każda aplikacja musi zawierać link do swojej polityki prywatności, a jeśli umożliwia założenie konta, musi też oferować usunięcie konta w samej aplikacji (Apple: App Store Review Guidelines).
- Informacje o prywatności: w App Store Connect trzeba podać praktyki aplikacji w zakresie przetwarzania danych, także praktyki wbudowanych komponentów zewnętrznych (na przykład analitycznych SDK); jest to wymagane przy zgłaszaniu zarówno nowej aplikacji, jak i aktualizacji (Apple: App privacy details).
- Wymagania dotyczące narzędzi: od 28 kwietnia 2026 r. aplikacje przesyłane do App Store Connect muszą być kompilowane w Xcode 26 lub nowszym, z użyciem iOS 26 SDK, a od 9 września 2026 r. aplikacje na iOS i iPadOS muszą być kierowane co najmniej na iOS 13 (Apple: Upcoming requirements).
- Konto firmowe: aby zarejestrować się jako organizacja, firma musi być osobą prawną i mieć numer D-U-N-S, a osoba dokonująca rejestracji musi być upoważniona do zaciągania zobowiązań w imieniu firmy (Apple: Enrollment).
- Status przedsiębiorcy w UE: Apple prosi dewelopera o oświadczenie, czy jest przedsiębiorcą w rozumieniu prawa UE; dane kontaktowe przedsiębiorców są w UE wyświetlane na stronie aplikacji w sklepie (Apple: Digital Services Act trader requirements).
Google Play
- Docelowy poziom API: od 31 sierpnia 2026 r. nowe aplikacje i aktualizacje na telefony muszą być kierowane co najmniej na Androida 16 (poziom API 36); istniejące aplikacje muszą być kierowane co najmniej na Androida 15 (poziom API 35), aby pozostały dostępne dla nowych użytkowników na urządzeniach z nowszymi wersjami Androida. Przy przedłużeniu, o które wystąpiono w Play Console, termin upływa 1 listopada 2026 r. (Android Developers: Target API level).
- Testowanie przy koncie osobistym: w przypadku osobistych kont deweloperskich utworzonych po 13 listopada 2023 r. przed publikacją produkcyjną trzeba przeprowadzić test zamknięty z co najmniej 12 testerami, którzy biorą w nim udział nieprzerwanie od co najmniej 14 dni (Play Console Help: testing requirements).
- Konto organizacji: konta deweloperskiego organizacji nie można utworzyć bez numeru D-U-N-S (Play Console Help: creating an account).
- Formularz bezpieczeństwa danych: trzeba go wypełnić dla każdej aplikacji opublikowanej w Google Play, także wtedy, gdy aplikacja nie zbiera danych użytkowników (Play Console Help: Data safety).
- Usuwanie konta: jeśli w aplikacji można założyć konto, trzeba umożliwić żądanie usunięcia konta i powiązanych danych zarówno w aplikacji, jak i za pomocą linku internetowego (Play Console Help: account deletion requirements).
Te zasady obowiązują niezależnie od technologii: aplikacja zbudowana we Flutterze lub w React Native musi spełniać te same wymagania dotyczące docelowego poziomu API i SDK co aplikacja natywna, a aktualizacje frameworka muszą za nimi nadążać. Zalecamy, aby konto deweloperskie należało do firmy zamawiającego: wtedy aplikacja ukazuje się pod nazwą Państwa firmy, a karta aplikacji w sklepie również pozostaje własnością firmy.
Dostępność
Obie platformy mają wbudowany czytnik ekranu (na iOS VoiceOver, na Androidzie TalkBack) i udostępniają interfejsy, dzięki którym aplikacje mogą współpracować z tymi technologiami wspomagającymi (React Native: Accessibility). Dokumentacja Fluttera zaleca na przykład, aby czytnik ekranu opisywał każdy element sterujący w zrozumiały sposób, aby współczynnik kontrastu między tekstem a tłem wynosił co najmniej 4,5:1 i aby każdy element, który można dotknąć, miał co najmniej 48×48 pikseli (Flutter: Accessibility). Dokumentacja Androida zaleca wytyczne Material Design, narzędzie Accessibility Scanner i automatyczne testy do wykrywania problemów (Android Developers: Accessibility).
To nie tylko dobra praktyka: zgodnie z dyrektywą (UE) 2019/882 państwa członkowskie mają od 28 czerwca 2025 r. stosować wymogi dostępności do usług handlu elektronicznego świadczonych konsumentom, także tych świadczonych za pośrednictwem aplikacji mobilnych (przepisy węgierskie opierają się na transpozycji dyrektywy); mikroprzedsiębiorstwa świadczące usługi muszą zostać z nich zwolnione (EUR-Lex: Dyrektywa (UE) 2019/882). Szczegóły dotyczące sklepów internetowych omawia artykuł Sklep internetowy: platforma abonamentowa czy rozwiązanie na zamówienie?.
Sztuczna inteligencja: na urządzeniu czy w chmurze?
W aplikacji mobilnej funkcja AI może działać w dwóch miejscach: na samym telefonie albo w dużym modelu językowym działającym w chmurze, za pośrednictwem backendu.
- Na urządzeniu (Apple): framework Foundation Models firmy Apple od iOS 26 daje dostęp do modeli zaprojektowanych dla Apple Intelligence, działających na urządzeniu i w Private Cloud Compute; można go używać do generowania tekstu, uzyskiwania ustrukturyzowanych wyników i wywoływania własnych narzędzi, ale tylko na urządzeniach obsługujących Apple Intelligence (Apple: Foundation Models).
- Na urządzeniu (Android): Gemini Nano działa w usłudze systemowej Android AICore i jest dostępny przez interfejsy ML Kit GenAI, na przykład do streszczania, korekty tekstu, przeformułowywania i opisywania obrazów. Według Google działa bez połączenia z siecią, a wrażliwe dane pozostają na urządzeniu, ale granice modelu wyznaczają limit tokenów i sprzęt urządzenia (Android Developers: Gemini Nano).
- W chmurze: duże modele językowe OpenAI (ChatGPT), Anthropic (Claude) i Google (Gemini) do bardziej złożonych zadań (asystent odpowiadający na podstawie własnych materiałów firmy, przetwarzanie dokumentów i obrazów, streszczenia). Klucz dostępu do usługi AI pozostaje na backendzie, a nie w telefonie: dzięki temu nie można go odczytać z aplikacji, a korzystanie z usługi można kontrolować na serwerze.
Model działający na urządzeniu jest atrakcyjny ze względu na ochronę danych i działanie offline, ale nie jest dostępny na urządzeniu każdego użytkownika, dlatego zazwyczaj warto planować go razem z rezerwowym rozwiązaniem w chmurze. O podłączaniu modeli piszemy na stronie Integracja AI.
Od czego zależy utrzymanie?
Aplikacja mobilna nie jest ukończona nawet po przekazaniu: jej otoczenie stale się zmienia. Nakład pracy związany z utrzymaniem wyznaczają przede wszystkim:
- Wymagania systemów operacyjnych i sklepów: Apple wymaga do przesyłania aplikacji nowszych wersji Xcode i SDK, a Google Play wyższego docelowego poziomu API. Powyższe daty pokazują, że wymagania te regularnie rosną.
- Zmiany wytycznych sklepów: nowe deklaracje dotyczące prywatności, zasady usuwania kont lub testowania.
- Aktualizacje frameworka: w aplikacji wieloplatformowej zmiana głównej wersji Fluttera, React Native lub .NET MAUI może oznaczać pracę we własnym kodzie i w używanych wtyczkach.
- Komponenty zewnętrzne: SDK płatności, map i analityki, które również mają własne wymagania dotyczące aktualizacji.
- Backend i integracje: zmiany interfejsów połączonych systemów firmowych i usług AI.
- Liczba baz kodu: dwie aplikacje natywne wymagają zmian w dwóch miejscach.
Częste błędy
- O technologii decydują przyzwyczajenia zespołu, a nie funkcje aplikacji.
- Uwzględnia się tylko ekrany, a nie backend i panel administracyjny.
- Stronę internetową jedynie opakowuje się w aplikację, a sklep ją odrzuca.
- Konto deweloperskie jest zarejestrowane na firmę wykonawcy, a karty aplikacji w sklepie nie da się później przenieść.
- Usuwanie konta, informacje o prywatności lub konto demonstracyjne uzupełnia się dopiero w dniu zgłoszenia.
- Nikt nie odpowiada za aktualizacje po przekazaniu, a po zmianie zasad aplikacja przestaje być widoczna dla nowych użytkowników.
Częste pytania
Natywna czy Flutter/React Native?
Jeśli aplikacja intensywnie korzysta z urządzenia (aparat, czujniki, procesy w tle) lub ma duże wymagania wydajnościowe, pewniejszą drogą jest rozwój natywny. Jeśli na obu platformach potrzebne są te same funkcje, aplikację ze wspólną bazą kodu zbudowaną we Flutterze lub w React Native łatwiej utrzymać. Kotlin Multiplatform pozwala pójść drogą pośrednią: wspólna logika biznesowa, natywny interfejs. Podczas pierwszej konsultacji przedstawiamy rekomendację na podstawie konkretnych funkcji.
Kiedy wystarczy aplikacja webowa (PWA)?
Gdy użytkownicy trafiają do niej z linku lub ze strony internetowej, głęboki dostęp do urządzenia nie jest potrzebny i ważne jest, aby działała tak samo na komputerze i na telefonie. Można ją zainstalować na ekranie głównym i także na iOS może wysyłać powiadomienia push, ale nie zapewnia obecności w sklepie, a zakres dostępnych funkcji urządzenia zależy od przeglądarki.
Czy potrzebny jest backend?
Niemal zawsze: gdy tylko aplikacja ma konta użytkowników, współdzielone dane lub powiadomienia, musi za nią stać serwer. Wyjątkiem jest aplikacja, która przechowuje dane wyłącznie na urządzeniu. Budujemy również backend i panel administracyjny oraz łączymy je z istniejącymi systemami firmy.
Kto publikuje aplikację w sklepach?
Publikacją zajmujemy się my: przygotowujemy materiały do karty aplikacji w sklepie i deklaracje dotyczące prywatności, zgłaszamy aplikację i prowadzimy ją przez proces weryfikacji. Zalecamy, aby konto deweloperskie należało do Państwa firmy; do konta organizacji oba sklepy wymagają numeru D-U-N-S, dlatego warto uzyskać go z wyprzedzeniem.
Od czego zależy koszt utrzymania?
Od tego, ile baz kodu trzeba utrzymywać, jak często zmieniają się systemy operacyjne i wymagania sklepów, z ilu komponentów zewnętrznych i integracji korzysta aplikacja oraz jakiego dalszego rozwoju się oczekuje. Cenę realizacji ustalamy na podstawie rozmiaru funkcjonalnego; metodę opisuje strona Wycena.
Jak możemy pomóc?
Tworzymy aplikacje na iOS i Androida: budujemy dla nich backend i panel administracyjny, podłączamy sztuczną inteligencję i prowadzimy projekt aż do publikacji w sklepach. Decyzję między rozwiązaniem natywnym a wieloplatformowym podejmujemy wspólnie z Państwem, na podstawie funkcji. Szczegóły usługi opisuje strona Aplikacje mobilne.
Rozmiar funkcjonalny tworzonego oprogramowania mierzymy w punktach funkcyjnych COSMIC (ISO/IEC 19761), a na tej podstawie powstają oferta i harmonogram. Pierwsza konsultacja jest bezpłatna, na życzenie zawieramy umowę o zachowaniu poufności (NDA), a po przekazaniu zapewniamy również eksploatację i utrzymanie. Kwestie kodu źródłowego i praw do korzystania reguluje umowa. Prosimy opisać swój pomysł w kilku zdaniach i skontaktować się z nami.
Źródła
- Apple: SwiftUI
- Android Developers: Jetpack Compose
- Android Developers: Android's Kotlin-first approach
- Flutter: Architectural overview
- Flutter: Measuring your app's size
- Flutter: Accessibility
- React Native
- React Native: About the New Architecture
- React Native: Accessibility
- Kotlin: Kotlin Multiplatform overview
- Kotlin: Stability of supported platforms
- Microsoft Learn: What is .NET MAUI?
- web.dev: Progressive Web Apps
- WebKit: Web Push for Web Apps on iOS and iPadOS
- Apple: App Store Review Guidelines
- Apple: App privacy details
- Apple: Upcoming requirements
- Apple: Enrollment
- Apple: Digital Services Act trader requirements
- Android Developers: Target API level requirements for Google Play
- Play Console Help: App testing requirements for new personal developer accounts
- Play Console Help: Required information to create a developer account
- Play Console Help: Data safety section
- Play Console Help: Account deletion requirements
- Android Developers: Accessibility
- EUR-Lex: Dyrektywa (UE) 2019/882
- Apple: Foundation Models
- Android Developers: Gemini Nano
- Firebase: Cloud Messaging