Jaką technologię wybrać do tworzenia aplikacji mobilnej?

by Randa Pawel

Politechnika Śląska UsosWEB

Celem przedmiotu jest prezentacja zagadnień związanych z tworzeniem oprogramowania dla urządzeń mobilnych z systemem Android oraz iOS. W ramach przedmiotu studenci nabędą umiejętności projektowania i tworzenia aplikacji oraz interfejsów użytkownika dla urządzeń mobilnych wyposażonych w wybrane systemy operacyjne. W ramach wykładów i zajęć laboratoryjnych zostaną przedstawione i omówione popularne języki programowania dla urządzeń mobilnych.

Pełny opis:

Tworząc aplikację mobilną, jaką technologię wybrać?

JavaScript powrót

Jeszcze parę lat temu nic nie wskazywało na to, że język skryptowy JavaScript będzie jednym z najpopularniejszych języków programowania. Przez wiele lat osobiście traktowałem go jako jedynie dodatek do ulepszenia części wizualnej aplikacji. Zmiana nastąpiła w 2009 roku, gdy Ryan Dahl pracując nad wprowadzeniem technologii push do stron internetowych, zdecydował się na język JavaScript jako ten w którym zrealizuje swój projekt. Decyzja ta miała wpływ na powstanie Node.js, które miało główny wpływ na to, żeby JavaScript zrewolucjonizowało tworzenie aplikacji webowych i mobilnych.

Możemy stwierdzić, że to jedyny język programowania, pozwalający tworzyć full-stack’owe aplikacje webowe z obsługą warstwy klienckiej (client-side) i serwerowej (server-side). Node.js pozwoliło developerom pójść krok dalej i stworzyć frameworki takie jak AngularJs, ReactJs czy też Vue.Js.

Na przykład z AngularJs stworzono pierwsze aplikacje działające na jednej stronie (single app) opartych o model MVW (Model-View-Whatever). Do gry weszli obecnie najwięksi w branży IT, czyli Google (AngularJs) i Facebook (Reactjs). W tej chwili w rankingu TIOBE Index w pierwszej dziewiątce najpopularniejszych języków do programowania jest właśnie JavaScript z tendencją wzrostową.

Ranking najpopularniejszych języków programowania według TIOBE Index, Marzec 2018.

Aplikacje mobilne kodowane w JavaScript?

Od wielu lat rozmawiając z programistami słyszałem o możliwościach pisania aplikacji mobilnych jedynie wykorzystując JavaScript, HTML i CSS.

Ale nie widziałem w tym szansy na przełożenie tych rozwiązań na wydajność aplikacji, czy również możliwości pisania bardziej złożonych rozwiązań. W tamtym czasie moje obawy pokrywały się z rzeczywistością. Ale czy nadal tak jest?

Przed rozpoczęciem przeglądu wszystkich możliwych rozwiązań pisania aplikacji mobilnych przez programistów trzeba wprowadzić klasyfikacje rozwiązań. Wyróżnić można 3 grupy rozwiązań tworzenia aplikacji mobilnych.

natywne (native) w pełni natywne (full native) hybrydowe (hybrid)

Full native

Java (Android) oraz Object-C/Swift (iOS) zaliczamy do pierwszej grupy w tworzeniu aplikacji mobilnych, gdzie do maszyny kompilowany jest kod źródłowy. Głównym pozytywem jest to, że rozwiązanie daje wysoką wydajność, przez to przy pisaniu gier ta technologia jest wręcz wskazana. Największym negatywem jest jednak to, że koszt samego stworzenia i eksploatacji jest bardzo wysoki.

Android to system operacyjny dla urządzeń mobilnych między innymi smartfonów, notebooków, tabletów.

Hybrid

Pewnie wszyscy z was słyszeli już o hybrydowym tworzeniu aplikacji mobilnych. Pisanie aplikacji na urządzenia mobilne przy pomocy JavaScript, HTML i CSS, podobnie jak webowych jest głównym założeniem tego rozwiązania. Za widok odpowiada podobnie jak przy stronach webowych wbudowana w urządzenie przeglądarka (WebView). A Cordova jest wykorzystywana do komunikacji z urządzeniem. Najłatwiej rzecz ujmując jest to po prostu API napisane w JavaScript, które pośredniczy między natywnym kodem aplikacji z uwzględnieniem spójności komunikacji z wszelkimi systemami urządzeń mobilnych (iOS, Android, Windows Mobile). Przykładowo frameworki takie jak Xamarin, PhoneGap i Ionic są wykorzystywane do implementacji hybrydowych aplikacji mobilnych. Największą wadą tego rodzaju technologiii jest stabilność i wydajność stworzonych aplikacji.

Plusami jednak są, niższy koszt stworzenia i eksploatacji oraz prostota w porównaniu do podejścia Full native.

Twórca rozwiązań pozwalających tworzyć aplikacje mobilne pod Android/iOS i Windows Mobile z użyciem .Net.

Native

Nie jest przypadkowe to, że o aplikacjach, które są określane mianem natywnych pisze się zazwyczaj na samym końcu. Biorąc pod uwagę to, że rozwiązanie to łączy powyżej opisane i przy tym niweluje ich główne minusy. Głównymi frameworkami kreowania aplikacji natywnych są React Native (Facebook) i NativeScript (telerik).

Ich historia jest dość młoda - sięga ledwie kilku lat wstecz i budzi dość spore emocje wśród developerów. Prawie identycznie jak w podejściu hybrydowym aplikacje pisane są z użyciem HTML/XML, JavaScript i CSS. Tyle, że nie jest tutaj wykorzystywana przeglądarka do renderowania widoku i obsługi zdarzeń. Aplikacja działa w pełni natywnie, co skutkuje lepszą jakością niż przy aplikacjach hybrydowych, a częstokroć przewyższa te tworzone w full native. Podobnie do aplikacji hybrydowych tworzenie i utrzymanie jest tańsze niż przy podejściu full native.

Jednym z dwóch najpopularniejszych frameworków umożliwiających pisanie aplikacji w podejściu native jest React Native. To właśnie w nim stworzono aplikacje takie jak Facebook, Instagram, Skype. Drugim najpopularniejszym, a dla mnie wręcz wschodzącą gwiazdą jest framework NativeScript.

NativeScript to framework typu open-source do tworzenia aplikacji mobilnych pod systemy Apple iOS i Android.

Najciekawszym rozwiązaniem jest w nim to, że można pisać w czystym JavaScripit, TypeScript bądź Angularze (obecnie przyswajane jest również Vue.Js). Plus również nie musimy programować dodatkowych komponentów jak to może mieć miejsce przy React Native, i dzięki temu mamy 100% dostęp do API urządzenia. Oczywiście ma również minus (a może to jest plus?): za ReactNative stoi ogromna firma i ogromne pieniądze, ale co również daje większe możliwości.

Co wybrać?

Opisane powyżej podejścia pozwalają pokrótce na poznanie obecnych technologii tworzenia aplikacji mobilnych. Osobiście będąc Web Developerem skłaniałbym się do wybrania tworzenia aplikacji w podejściu native. W tej właśnie technologii upatruję przyszłość tworzenia aplikacji mobilnych.

Chcesz sprawnie stworzyć aplikację mobilną?

Jaką technologię wybrać do tworzenia aplikacji mobilnej?

Powrót JavaScript

Gdybyście spytali mnie kilka lat temu o JavaScript, powiedziałbym, że to dobry dodatek do ulepszenia części wizualnej aplikacji, poprzez dodanie różnego rodzaju dynamicznych elementów do strony. Wtedy raczej nikt się nie spodziewał, że ten język skryptowy stanie się jednym z najpopularniejszych języków programowania. W 2009 roku nastąpiło wydarzenie, które było przełomem. A mianowicie, Ryan Dahl pracując nad wprowadzeniem technologii push do stron internetowych, do tego projektu wykorzystał właśnie JavaScript. Ta decyzja wpłynęła na powstanie Node.js, co z kolei było niezbędne by JavaScript zrewolucjonizowało tworzenie aplikacji webowych i mobilnych.

Śmiało można powiedzieć, że to jedyny język programowania, pozwalający tworzyć full-stack’owe aplikacje webowe z obsługą zarówno warstwy klienckiej (client-side) jak i serwerowej (server-side). Node.js pozwoliło developerom pójść o krok dalej i stworzyć frameworki takie jak AngularJs, ReactJs, czy też Vue.Js.

Przykładowo z AngularJs stworzono pierwsze aplikacje działające na jednej stronie (single app) w oparciu o model MVW (Model-View-Whatever). Do gry weszli obecnie najwięksi w branży IT, czyli Google (AngularJs) i Facebook (Reactjs). W tej chwili w rankingu TIOBE Index w pierwszej dziewiątce najpopularniejszych języków do programowania znajduje się właśnie JavaScript i pnie się jeszcze wyżej.

Ranking najpopularniejszych języków programowania według TIOBE Index, Marzec 2018.

Według RedMonk JS plasuje się na pierwszym miejscu (czerwiec 2019) i pozycja ta utrzymuje się od 2014 roku, kiedy to w styczniu język ten zrzucił z pierwszej pozycji Jave.

Kodowanie aplikacji mobilnych w JavaScript?

Od wielu lat rozmawiając z programistami słyszałem o możliwościach pisania aplikacji mobilnych przy wykorzystaniu jedynie JavaScript, HTML i CSS.

Jednak nie widziałem w tym szansy na przełożenie tych rozwiązań na wydajność aplikacji. Wydawało się to też niepraktyczne w tworzeniu bardziej złożonych rozwiązań. W tamtym czasie moje obawy pokrywały się z rzeczywistością. Ale czy teraz dalej są aktualne?

Zanim rozpoczniemy przegląd wszystkich możliwych rozwiązań pisania aplikacji mobilnych przez programistów, wprowadzę klasyfikację. Wyróżnić można 3 grupy rozwiązań tworzenia aplikacji mobilnych:

natywne (native)

w pełni natywne (full native)

hybrydowe (hybrid)

Full native

Java/Kotlin (Android) oraz Object-C/Swift (iOS) zaliczamy do pierwszej grupy w tworzeniu aplikacji mobilnych, gdzie komunikujemy się z urządzeniem w sposób w pełni natywny. Główną zaletą tego rozwiązania jest wysoka wydajność, przez co technologia ta jest wskazana przy pisaniu gier bądź aplikacji wymagających większych obciążeń i zasobów po stronie urządzenia. Natomiast główną wadą, przede wszystkim dla biznesu, jest bardzo wysoki koszt stworzenia i eksploatacji aplikacji. Nie wspominam tutaj o Windows Mobile, bo według mnie obecnie nie jest to już technologia, o której warto wspominać w moim wpisie.

Hybrid

Zapewne słyszeliście już o hybrydowym tworzeniu aplikacji mobilnych. Głównym założeniem tego rozwiązania – dla aplikacji na urządzenia mobilne, jak i rozwiązań webowych – jest wykorzystanie JavaScript, HTML i CSS. Za widok odpowiada, podobnie jak przy stronach webowych, wbudowana w urządzenie przeglądarka (WebView). Natomiast do komunikacji z urządzeniem wykorzystywana jest Cordova. Najprościej rzecz ujmując jest to zwyczajnie API napisane w JavaScript, które pośredniczy między natywnym kodem aplikacji z uwzględnieniem spójności komunikacji z wszelkimi systemami urządzeń mobilnych (iOS, Android, Windows Mobile). Przykładowo frameworki takie jak Xamarin, PhoneGap i Iconic są wykorzystywane do implementacji hybrydowych aplikacji mobilnych. Największą wadą tego rodzaju technologii jest stabilność i wydajność stworzonych aplikacji (WebView jest tutaj słabym punktem dla tych kryteriów).

Jednak zaletami tego rozwiązania są niższy koszt stworzenia i eksploatacji oraz prostota w porównaniu do podejścia Full native.

Native

To nie przypadek, że o aplikacjach natywnych pisze się zazwyczaj na końcu. Jest tak gdyż to rozwiązanie łączy powyżej opisane, niwelując przy tym ich największe minusy. Głównymi frameworkami kreowania aplikacji natywnych są React Native (Facebook) i NativeScript (telerik). Obecnie do gry wszedł również Flutter, aczkolwiek jest to jeszcze dość młoda technologia w porównaniu do wcześniej wymienionych.

Historia tego rozwiązania ma dość krótką opowieść – sięga ledwie kilku lat wstecz i budzi spore emocje wśród developerów. Podobnie jak w podejściu hybrydowym aplikacje pisane są z użyciem HTML/XML, JavaScript i CSS/SASS. Różnica jest taka, że nie wykorzystuje się tutaj przeglądarki do renderowania widoku i obsługi zdarzeń. Aplikacja działa w pełni natywnie – efektem tego jest lepsza wydajność niż przy aplikacjach hybrydowych, a częstokroć przewyższa nawet te tworzone w full native (twierdzę tak na podstawie dostępnych benchmarków w Internecie). To podejście, podobnie jak podejście hybrydowe, jest dużo tańsze przy tworzeniu aplikacji mobilnej i w utrzymaniu niż aplikacje full native.

Jeśli chodzi o framework umożliwiający pisanie aplikacji w podejściu native, to jednym z najpopularniejszych rozwiązań jest React Native. To właśnie w nim stworzono aplikacje takie jak Facebook (obecnie już zmigrowany do full native), Instagram, Skype. Drugie z najpopularniejszych rozwiązań, a moim zdaniem bardzo perspektywicznym, jest framework NativeScript. Jest to framework open-source do tworzenia aplikacji mobilnych na systemy Apple iOS i Android.

Najciekawszym rozwiązaniem jest w nim to, że można pisać w czystym JavaScript, TypeScript, Angular bądź Vue.Js. Dodatkową zaletą jest to, że nie musimy programować dodatkowych komponentów jak to zdarza się przy React Native. Dzięki temu mamy 100% dostęp do API urządzenia. Za React Native stoi ogromna firma i ogromne pieniądze, za NativeScript niesamowita społeczność.

Co wybrać?

Przedstawione wyżej podejścia dają pewien pogląd na to jak wyglądają aktualne technologie tworzenia aplikacji mobilnych. Osobiście, jako Web Developer, skłaniam się w stronę tworzenia aplikacji w podejściu native. Tą technologię postrzegam jako najbardziej przyszłościową w tworzeniu aplikacji mobilnych, a sam od 2 lat tworzę aplikacje mobilne z NativeScript/Angular/TypeScript.

_______________________________________________________________________________

Marek Tenus – programista z ponad 15 letnim doświadczeniem w projektach komercyjnych. Obecnie CTO w firmie HighSolutions . Zaczynał od C/C++, a potem pracował kilka lat z Python i Ruby. Od początku związany z językiem PHP i JavaScript. Określa siebie jako Full-stak engineer, dlatego też lubi poznawać nowe technologie. Jego obecne pasje technologiczne to ML, NLP i rozwiązania chmurowe.

Leave a Comment