Arkadiusz Zimny, Programista oprogramowania mobilnego

Czas czytania: 10 min

Wybór odpowiedniej technologii do stworzenia aplikacji to jeden z kluczowych etapów projektowania rozwiązań mobilnych. Za tą decyzją kryje się niewątpliwie wiele czynników, takich jak funkcjonalność, wydajność, koszty, czy też – myśląc długoterminowo – utrzymanie kodu. Przed przystąpieniem pracy nad danym rozwiązaniem, twórcy aplikacji mierzą się z tym wyzwaniem, decydując o wyborze technologii w porozumieniu z klientami. To zrozumiałe, że decydenci zamawiający wykonanie aplikacji chcą wiedzieć, co będzie odpowiednie dla ich projektu, biorąc pod uwagę wyżej wymienione własności. Niniejszy artykuł pomoże obu stronom w wyborze odpowiedniego frameworku. 

W 2024 roku debata na temat wyboru technologii jest mocno ukierunkowana na technologie wieloplatformowe (ang. cross-platform software), a oczy skierowane są na absolutnych faworytów – Fluttera oraz Kotlin Multiplatform. Obecnie obie platformy są powszechnie używane i zyskują coraz większe grono zwolenników. Programiści poradzili sobie z większością problemów, jakie można było napotkać na początku wdrażania obu rozwiązań. Zupełnie nowy język (Dart we Flutterze) oraz rozwinięty, istniejący już wcześniej Kotlin to dziś dynamicznie rozwijający się duet, którego przedstawiciele mają ze sobą wiele cech wspólnych, ale jednocześnie prezentują różne podejścia do niektórych aspektów programowania. Na pytanie, czy są to lepsze, czy gorsze koncepcje, postaram się odpowiedzieć w niniejszym artykule. 

Spójrzmy na to z technicznej strony 

W praktyce programiści korzystają z języków programowania, które nie są specyficzne dla konkretnych urządzeń lub systemów operacyjnych. Zamiast tego używają architektur oprogramowania pozwalających na tworzenie aplikacji działających na dwóch lub więcej platformach. Architektury te zapewniają dostęp do różnych zestawów SDK (ang. Software Development Kit) oraz bibliotek dla wielu platform (w omawianym przypadku – Android/iOS). Tak można streścić podstawowe założenie Fluttera i Kotlin Multiplatform. Przejdźmy teraz nieco głębiej. 

Flutter – przegląd możliwości 

Flutter wykorzystuje wspomniany wcześniej język programowania Dart, aby zapewnić atrakcyjny i płynny interfejs użytkownika. W odróżnieniu od innych frameworków, Flutter posiada własne silniki renderujące, co umożliwia dokładną kontrolę nad elementami interfejsu. Dzięki temu aplikacje stworzone we Flutterze mają natywny wygląd i działają płynnie na obu platformach. Twórcą Fluttera jest Google, który chciał stworzyć konkurencyjne rozwiązanie w wyścigu o dominację na rynku technologii wieloplatformowych. 

Plusy korzystania z Fluttera 

Od łatwości nauki języka Dart po funkcję „Hot Reload” – Flutter oferuje szereg korzyści, które wyróżniają go na tle konkurencji. Poniżej przedstawiam szczegółową listę jego głównych zalet. 

  • Dart znacznie różni się od powszechnie stosowanych języków, lecz mimo to ma prostą i tradycyjną składnię, opartą na językach z rodziny C/C++. Podczas gdy Kotlin Multiplatform jest zdecydowanie trudniejszy do opanowania przez programistów, którzy wcześniej pracowali natywnie na platformie iOS, Flutter jest łatwy w obsłudze i szybki do nauczenia. Dodatkowo, jako platforma typu open source, oferuje szerokie możliwości dostosowywania. Oznacza to, że programiści mogą korzystać z oryginalnej bazy kodu oraz dokumentacji, która jest wysoce ceniona za dostępność i przejrzystość. Darmowy Flutter przyczynia się do wzrostu społeczności użytkowników. Doświadczony programista nie powinien mieć trudności ze zrozumieniem, jak używać języka Dart. Co więcej, na początku 2024 roku Flutter zdobył ponad 160 tysięcy gwiazdek na GitHubie! 
  • Wspólna baza kodu przyspiesza realizację projektu i pozwala na szybsze wprowadzenie produktu na rynek. Ta zaleta charakteryzuje obie z omawianych technologii, jednak to Flutter zyskał popularność w komercyjnych aplikacjach wcześniej niż Kotlin Multiplatform. 
  • Mówisz Flutter – myślisz widżety. Flutter stosuje spójny model bazujący na widżetach – kluczowych komponentach, na których opiera się cała aplikacja. Widżety dzielą się na w pełni funkcjonalne i gotowe do użycia oraz na konfigurowalne, w przypadku których to programista dostosowuje wygląd elementów przed ich udostępnieniem użytkownikom. Ponieważ widżety są częścią aplikacji, a nie konkretnej platformy, produkt końcowy najprawdopodobniej napotka mniej problemów ze zgodnością na różnych platformach i wersjach systemów operacyjnych. Dzięki Flutterowi programiści mogą tworzyć uniwersalne, funkcjonalne i adaptacyjne interfejsy użytkownika w krótkim czasie.  
  • Jedną z wyjątkowych zalet tworzenia aplikacji we Flutterze jest potężna funkcja „Hot Reload”. Dzięki niej programiści mogą obserwować aktualizacje aplikacji w czasie rzeczywistym, bez potrzeby jej pełnego ponownego uruchamiania. Mogą edytować swój kod, wprowadzać zmiany w logice lub interfejsie użytkownika, a zaraz po tym natychmiast obserwować efekty tych zmian podczas działania aplikacji. W przypadku większości modyfikacji nie ma potrzeby ponownego ładowania całej aplikacji. Funkcja „Hot Reload” to jedna z najbardziej cenionych i najpotężniejszych zalet Fluttera, która od powstania platformy znacznie ułatwia pracę programistów. 
  • Architektura Fluttera sprawia, że jego wydajność jest zbliżona do natywnej, szczególnie w zakresie renderowania interfejsu użytkownika. Choć nie dorównuje jeszcze pełnej wydajności natywnej aplikacji mobilnej, jest bardzo blisko ideału. Flutter często osiąga lub przewyższa natywną wydajność w innych obszarach i jest bardziej funkcjonalny niż inne rozwiązania wieloplatformowe. Sporadyczne spadki wydajności animacji we Flutterze często przypisuje się bibliotekom stron trzecich, a nie samemu frameworkowi. 

Wady korzystania z Fluttera 

Choć Flutter oferuje wiele korzyści przemawiających za jego wyborem, nie jest wolny od wad. Warto jednak przyjrzeć się niedoskonałościom, które, mimo że nie przyćmiewają jego zalet, są istotne przy podejmowaniu decyzji o wyborze tej technologii. 

  • Mimo że mamy rok 2024, a od wydania pierwszej stabilnej wersji Fluttera minęło sześć lat, wciąż istnieje ryzyko napotkania ograniczeń technologicznych przy próbie wdrażania bardziej zaawansowanych funkcjonalności. Aby nie wynajdywać koła na nowo przy pracy nad każdym z projektów, programiści często posiłkują się gotowymi bibliotekami. W przypadku braku odpowiedniej biblioteki dla Fluttera developerzy muszą włożyć wysiłek w modyfikowanie bibliotek natywnych, aby umożliwiały prawidłowe działanie. Na szczęście, w porównaniu do początków Fluttera, takie przypadki zdarzają się coraz rzadziej. Odpowiedzi na wady, które wciąż mogą występować w stosunkowo młodym języku Dart i frameworku Flutter, są zazwyczaj dostępne dzięki wsparciu społeczności Fluttera. Niektóre przypadki brzegowe (ang. edge cases) wciąż pozostają bez rozwiązania, lecz sytuacja może ulec zmianie
  • Wiele rozwiązań napisanych w technologii Flutter jest „ciężkich” – ich zbudowane wersje są zauważalnie większe niż natywne odpowiedniki. Dzieje się tak, ponieważ Flutter zawiera komponenty interfejsu użytkownika i silnik renderowania w aplikacji, aby zapewnić natywną wydajność. To prawdziwe wyzwanie dla programistów dążących do tworzenia lekkich i konkurencyjnych pod względem wielkości rozwiązań. Użytkownicy nie chcą aplikacji, która jest ciężka, długo się pobiera i zajmuje dużo pamięci urządzenia mobilnego. Choć korzystanie z jednego rozwiązania zamiast dwóch stanowi zaletę, finalnie odbiorca produktu używa tylko jednej wersji aplikacji
  • Korzystanie wyłącznie z udostępnionych widżetów Fluttera może być zarówno zaletą, jak i wadą. Często podczas rozwoju platformy i aktualizacji do nowszych wersji oprogramowania zmienia się interfejs użytkownika lub jego poszczególne elementy. Jak radzi sobie z tym aplikacja natywna? Jeśli jest zaprojektowana tak, by się adaptować, sama dostosuje się do zmian. Jednak oprogramowanie napisane we Flutterze wymaga aktualizacji bibliotek i ręcznych aktualizacji aplikacji, co zwykle jest niewygodne dla programistów. Jest to akceptowalne w przypadku korzystania z określonego systemu projektowania, ale jeśli takie działanie nie zostało przewidziane, jedynym rozwiązaniem jest ręczna aktualizacja wersji bibliotek i aplikacji. Należy też pamiętać, aby po większych aktualizacjach bibliotek i aplikacji przeprowadzić testy frontendu w celu identyfikacji potencjalnych błędów. 

Kotlin Multiplatform – przegląd możliwości 

Kotlin Multiplatform, często określany jako KMP lub KMM (Kotlin Multiplatform Mobile), to technologia typu open source opracowana przez JetBrains, która została wprowadzona jako dodatkowa funkcja języka Kotlin w 2020 roku. Działa w oparciu o koncepcję modułów współdzielonego kodu. Programiści piszą kod niezależny od platformy w Kotlinie, tworząc wspólne moduły zawierające logikę biznesową i podstawowe funkcjonalności aplikacji. Moduły te są następnie kompilowane do kodu specyficznego dla danej platformy. Kotlin Multiplatform cieszy się największą popularnością wśród programistów Androida. Warto zauważyć, że celem Kotlin Multiplatform nie jest zastąpienie rozwoju aplikacji natywnych, lecz raczej współistnienie z nimi i ulepszanie ich poprzez zmniejszenie redundancji kodu, czyniąc projekt łatwiejszym w zarządzaniu. Kotlin Multiplatform oferuje unikalną propozycję wśród technologii wieloplatformowych – wszystko jest wieloplatformowe z wyjątkiem interfejsu użytkownika

Plusy korzystania z Kotlin Multiplatform 

Podobnie jak Flutter, Kotlin Multiplatform oferuje wiele korzyści przemawiających za wyborem właśnie tego rozwiązania. Oto najważniejsze z nich: 

  • Istniejący projekt napisany natywnie w języku Kotlin (bądź Java) można przekształcić na wieloplatformowe rozwiązanie. Konwersja istniejącego kodu Kotlin jest bardzo prosta i zapewnia pełen dostęp do bibliotek. Nawet jeśli projekt zawiera tysiące linii kodu w Kotlinie, możliwa jest stopniowa konwersja, która nie wpływa negatywnie na bazę kodu ani proces tworzenia oprogramowania. Dzięki tej kompatybilności pisanie i migracja aplikacji stają się znacznie szybsze. Nowy pomysł na aplikację nie musi oznaczać całkowitego przejścia między technologiami i rozpoczęcia pracy „od początku”. To pakiet SDK, a nie framework. Oznacza to, że zespoły posiadające istniejące aplikacje mogą po prostu dodać moduł lub migrować niewielką część kodu, aby ocenić jego wykonalność bez dużego nakładu pracy na starcie. 
  • Kotlin Multiplatform kładzie nacisk na udostępnianie kodu na niższym poziomie, umożliwiając programistom ponowne wykorzystanie logiki biznesowej, algorytmów i modeli danych na różnych platformach. 
  • Dzięki Kotlin Multiplatform programiści mogą bezpośrednio używać natywnych komponentów interfejsu użytkownika, co skutkuje bardziej wydajnym renderowaniem. To jedna z najważniejszych zalet wykorzystania Kotlin Multiplatform w projektach aplikacji mobilnych. Przykładowo, można uzyskać dostęp do kamery czy takich funkcji jak Bluetooth. Wsparcie dla natywnych funkcji na platformach Android i iOS zapewnia działanie aplikacji analogiczne do w pełni natywnych odpowiedników. Tylko KMM umożliwia osiągnięcie tego w 100%
  • Równie istotnym atutem KMM jest jego solidny system obsługi wielowątkowości mający ogromne znaczenie w aplikacjach o dużym obciążeniu. W Kotlinie wielowątkowość opiera się na technologii nieobsługiwanej w Swift. Istnieją jednak pewna narzędzia i zastosowania, które mogą pomóc w rozwiązaniu tego problemu. 

Wady korzystania z Kotlin Multiplatform 

Tak jak w przypadku Fluttera, również użycie tej technologii wymaga pewnych kompromisów. Oto główne z wad, które obecnie charakteryzują Kotlin Multiplatform:

  • Długi czas kompilacji jak na technologię wieloplatformową (mniejsza prędkość kompilacji). Kompilacja projektu w Kotlin Multiplatform nadal nie jest tak szybka jak w przypadku innych nowoczesnych rozwiązań. 
  • To, co w niektórych sytuacjach jest zaletą, w innych projektach może stanowić wadę. Choć głównym atutem Kotlin Multiplatform jest w pełni natywny interfejs użytkownika, pisanie go oddzielnie dla obu platform wymaga, aby w zespole pracowali zarówno programiści Androida, jak i iOS. 
  • Małe aplikacje z niewielką ilością kodu w podstawowych warstwach (nie w interfejsie użytkownika) mogą być nieopłacalne z KMM, ponieważ ta technologia oferuje minimalne (lub zerowe) oszczędności w takich przypadkach. Dlatego warto rozważyć plan dalszego rozwoju aplikacji. 
  • Z uwagi na „młody wiek” technologii, mogą występować sytuacje, w których brakuje „idealnego” rozwiązania dla pełnej implementacji funkcjonalności czy architektury, podobnie jak we Flutterze, o czym pisałem wyżej. 

Flutter i Kotlin Multiplatform – porównanie możliwości frameworków to dopiero początek 

Rozważając wydajność, Kotlin Multiplatform prawdopodobnie ma przewagę, biorąc pod uwagę jego zdolność do wykorzystania kodu natywnego. Różnica nie jest jednak ogromna, a łatwy i szybki proces kompilacji Fluttera, wspierany przez funkcję ładowania na gorąco (Hot Reload), może zrekompensować tę stratę i przeważyć szalę na swoją stronę. 

Obszerna dokumentacja, popularne wątki i liczne biblioteki dla obu technologii świadczą o popularności obu frameworków i silnym wsparciu wśród programistów. Pomoc ze strony społeczności i dostępność zasobów sprawiają, że obie technologie mocno ze sobą konkurują. 

W zależności od potrzeb klienta i specyfikacji projektu, zalety i wady omówione w poprzednich akapitach mogą pomóc w wyborze odpowiedniej technologii. Chociaż wiele z tych cech może mieć wpływ na wybór, najlepiej jest podjąć ostateczną decyzję przy udziale specjalistów, przedstawiając im wstępne wymagania i oczekiwania dotyczące produktu końcowego. Wybór technologii nie powinien opierać się wyłącznie na podążaniu za najnowszymi trendami. 

Podsumowanie 

Artykuł ten ma na celu przedstawienie kluczowych cech, wad i zalet technologii, które są istotne zarówno dla klientów, kadry menedżerskiej, jak i programistów zaangażowanych w projekt. W 2024 roku Flutter i Kotlin Multiplatform mają silną pozycję na rynku, udowadniając swoją skuteczność w zapewnianiu wysokiej wydajności i skalowalności w różnego typu wyzwaniach. Choć trudno jednoznacznie wskazać, która z platform jest lepsza, obie mają swoje mocne i słabe strony, a ich rozwój i użyteczność pokazują, że z biegiem lat umacniają swoją pozycję w dziedzinie aplikacji wieloplatformowych. 

Niezależnie od ostatecznego wyboru technologii, celem pozostaje stworzenie aplikacji, która będzie pełnowartościowym produktem, zaspokajającym potrzeby i oczekiwania odbiorców. 

Potrzebujesz wsparcia w tworzeniu wieloplatformowej aplikacji mobilnej?

Dowiedz się więcej
Ailleron - Flutter vs. Kotlin Multiplatform - który framework wybrać dla swojego projektu?

Arkadiusz Zimny Programista oprogramowania mobilnego

Programista z doświadczeniem w projektowaniu aplikacji na Androida, specjalizujący się w takich technologiach jak Kotlin, Kotlin Multiplatform i Flutter. Współtworzy rozwiązania dla krajowych i zagranicznych banków. Zaangażowany w mentoring, prowadzenie wykładów tematycznych oraz dzielenie się wiedzą na temat frameworków do aplikacji mobilnych.

linie abstrakcyjne

Sprawmy, aby doświadczenia finansowe były
łatwe i przyjemne!

Powiedz nam, czego potrzebujesz, a my się z Tobą skontaktujemy.

Powiedz nam, czego potrzebujesz, a my się z Tobą skontaktujemy.