Możliwe sposoby projektowania aplikacji mobilnych

Możliwe sposoby projektowania aplikacji mobilnych
Niniejszy artykuł porusza temat dostępnych metod projektowania aplikacji mobilnych. Na czas obecny istnieją dwie najbardziej rozpowszechnione platformy: iOS i Android. Niestety, popularność Windowsa waha się na granicy błędu.

Zarówno dla Androida, jak i dla iOS istnieją:

  • Znakomite narzędzia rozwoju;
  • Bardzo dobre communities, blogi, podkasty, specjalistyczne zasoby internetowe;
  • Ogromna ilość rozbudowanych bibliotek open source.
Przy pomocy rodzimych narzędzi możliwe jest stworzenie wielu aplikacji dla każdej platformy.

Tym niemniej, czasem pojawiają się pytania:

  • Czy można wykonać wszystko wspólnymi siłami jednego zespołu?
  • W jaki sposób można ponownie zastosować kod w innej platformie?
  • Czy rozwiązanie może być wdrożone siłami istniejącego zespołu?
  • Jak stworzyć aplikację mobilną dla Androida i iOS w jak najkrótszym czasie?
  • I czy możliwe jest stworzenie prototypu, który będzie pracował na wszystkich platformach?
Kiedyś dostałem zadanie, by realizować proof of koncept pracujący na tabletach iOS, Android i Windows7 (tak, dokładnie Windows 7). W danej sytuacji szczególnie przydatnymi okazały się podejścia z wykorzystaniem rozwiązań cross-platformy.

Obecnie, należy wyróżnić następujące możliwe rozwiązania dla cross-platformy:

  1. Xamarin
  2. ReactNative
  3. NativeScript
  4. Ionic
  5. Appcelerator
O każdym z nich można napisać oddzielny artykuł, lecz postaram się przedstawić je w krótkim opisie i zwrócić uwagę na niektóre ważne cechy. Jeśli chciałbyś przyjrzeć się oddzielnie wybranej z platform, z radością to zrobię w jednym z moich następnych artykułów.

1) Xamarin

Platforma ta nie tak dawno została wykupiona przez firmę Microsoft. Wcześniej była płatna - obecnie jest całkowicie bezpłatna. Jej cechy szczególne:

  • Programiści mogą używać języka C# jako języka programowania;
  • Rozwiązanie jest oparte na platformie Mono;
  • Wszystkie API na platformie są zapewnione przez klasy-powłoki C#;
  • Istnieje możliwość ponownego użycia komponentów UI na Androidzie i iOS - Xamarin.Forms;
  • W razie potrzeby użycia kontroli rodzimych dla systemu kontroli, można użyć Xamarin.Android i Xamarin.iOS.
Dane rozwiązanie jest właściwe, jeśli posiadasz gotowy zespół programistów C#, który z łatwością można przerzucić na tworzenie aplikacji mobilnych. Warto także mieć na uwadze, że dzięki użyciu Mono-platformy wydajność nie spadnie na tyle, na ile przy użyciu JavaScript framework'ów.

Jako IDE można użyć zarówno Xamarin Studio, jak i Visual Studio, być może jednego z lepszych framework'ów dla realizacji obciążonych funkcjonalnością projektów. Należy jednak pamiętać, że możesz poczuć dyskomfort przy programowaniu aplikacji mobilnych z punktu widzenia narzędzi: Android Studio i Xcode oferują znacznie więcej funkcjonalności.

2) React Native

Rozwiązanie proponowane przez Facebook z dostatecznie interesującym podejściem. Dany framework:

  • jest logiczną kontynuacją React, jedynie dla środowisk mobilnych;
  • jako języka programowania używa JavaScript;
  • UI natywne dla każdej platformy;
  • UI jako funkcja bieżącego stanu;
  • Jest oparty na wzorcu FLUX.
Possible Ways to Build Mobile ApplicationsInterfejs użytkownika dzieli się na odrębne komponenty dla zapewnienia procesu renderowania. Ważne jest, aby prawidłowo zorganizować przepływ danych i nawiązać interakcję między komponentami. Jest to niezbędne dla właściwej organizacji struktury kodu. Zdecydowanie polecam zwrócenie uwagi na Redux.

Podoba mi się idea React. Gdy raz nauczysz się pisać kod dla web, możesz z łatwością zacząć używać tego samego podejścia wyłącznie dla urządzeń mobilnych. Jako że UI jest izolowane, można ponownie wykorzystać ten sam kod między mobilnymi i webowymi rozwiązaniami.

3) NativeScript

  • NativeScript używa renderingu natywnego, żadnych WebView
  • Używa Angular 2
  • Standardowe dwukierunkowe wiązanie danych
  • W odróżnieniu od Phonegap, nie trzeba instalować żadnych pluginów dla użycia natywnych API; otrzymuje się rozwiązanie out-of-the-box.
W porównaniu z React Native, NativeScript nie wydziela się niczym szczególnym, z wyjątkiem tego, że jest oparty na frameworku Angular2.

4) Ionic

Oparty na frameworku Angular
Rendering w WebView
Zorientowany na urządzenia mobilne z dużą ilością controls
Przy konieczności użycia API platformy należy użyć dodatkowych pluginów
Wyraźnie niższa wydajność w porównaniu z React Native i NativeScript

5) Appcelerator
  • Framework Alloy MVC
  • Natywne UI-controls
  • Duży komponent marketplace
  • Prekursor w użyciu native controls w połączeniu z JavaScript
  • Możliwość użycia PHP, Ruby, Python

Wnioski

W niniejszym artykule powinienem także opisać Qt i inne narzędzia do wieloplatformowego tworzenia aplikacji. Jak pokazuje praktyka, w większości przypadków:

Wieloplatformowe rozwiązania JavaScript są najefektywniej wykorzystane:

  • jako część dedykowanej funkcjonalności aplikacji, używającej natywne komponenty;
  • dla zweryfikowania postawionych hipotez, związanych z aplikacjami mobilnymi.

Złożone wieloplatformowe rozwiązania mają swoje długoterminowe zastosowanie w:

  • budowaniu komponentów typu SIP-stock
  • matematycznych obliczeniach
  • bibliotekach graficznych, itd.
Najbardziej praktycznym wieloplatformowym rozwiązaniem jest platforma Xamarin.

Przyszłość należy do rozwiązań hybrydowych: gdy niemożliwe jest zrezygnowanie z natywnych komponentów interfejsu użytkownika, można przenieść logikę biznesową do wieloplatformowych bibliotek C/C++. Być może zajdzie potrzeba stworzenia okna pop-up lub ekranu ustawień, który może być z łatwością zrealizowany przy pomocy JavaScript. Na szczęście, nie istnieje całkowicie uniwersalnych rozwiązań. Dlaczego na szczęście? Ponieważ, dzięki różnorodności świata można spróbować swych sił w rozmaitych technologiach i znajdować najbardziej odpowiednie rozwiązania, a także wnosić do opracowywanych rozwiązań proste i eleganckie podejścia z sąsiednich technologii.

P.S. Na początku artykułu napisałem: "Kiedyś dostałem zadanie, by zrealizować proof of koncept pracujący na tabletach iOS, Android i Windows7 (tak, dokładnie Windows 7)." Zdołałem rozwiązać to zadanie za pomocą React + Redux + Material UI, a także Cordova i Electron dla upakowania aplikacji dla iOS, Androida i Windows 7.

Ivan Alyakskin
Software Consultant