Pierwsza aplikacja mobilna - od czego zacząć?
Tworzenie aplikacji mobilnych jest obecnie bardzo atrakcyjną ścieżką rozwoju w karierze programisty. Niemalże każda firma ma w swoim portfolio mniejszą lub większą aplikacje na smartfony. Dodatkowo łatwy dostęp do urządzeń przenośnych sprawa, że jest to platforma nie tylko dla oprogramowania użytkowego lub biznesowego, ale także od dłuższego czasu jest ważnym graczem na rynku przemysłu rozrywkowego. Z tego też powodu powstaje olbrzymia ilość aplikacji i gier tworzonych przez niewielkie zespoły, a nawet pojedyncze osoby. W wielu przypadkach dobry pomysł i ciężka praca mogą zaowocować powstaniem rewelacyjnych aplikacji, które zdobędą serca i uznanie użytkowników na całym świecie.
Jaką platformę wybrać do programowania?
W tym momencie trzeba jednak zmierzyć się z kilkoma problemami, o których będzie ten wpis. Pierwszą rzeczą jest wybór języka i narzędzi, jakimi będziemy tworzyli naszą wymarzoną aplikację. Tutaj wybór jest bardzo szeroki i każdy znajdzie coś dla siebie. Można tworzyć natywnie w Javie (lub Kotlinie) celując w urządzenia oparte na Androidzie lub w Objective-C (Swift) chcąc tworzyć na iOS. Dobrym wyborem może się okazać także postawianie na technologię, która pozwala na tworzenie aplikacji na wiele platform jednocześnie. W takim podejściu na czele wyłania się kilka ciekawych możliwości. Jedną z nich jest platforma Xamarin.Forms. Opisze tutaj kilka uniwersalnych problemów jakie napotka nowa osoba w świecie mobilnego programowania, a także kilka dobrych rad dla osób,, chcących zacząć przygodę właśnie z Xamarinem. Na koniec pokażę jak szybko zrobić w Xamarin.Forms przysłowiowy "Hello World".
Xamarin od Microsoftu jako ciekawy wybór na początek
Wybór padł na platformę Xamarin ze względu na kilka czynników. Projekt jest obecnie bezpośrednio pod skrzydłami Microsoftu, co zapewnia wsparcie i rozwój w kolejnych latach. Dodatkowo Xamarin występuję w dwóch wariantach, co pozwala na optymalizację naszej pracy. Xamarin.Forms (który omówimy) do tworzenia jednej aplikacji działającej na kilku systemach, współdzielimy wówczas zarówno kod, jak i widoki. Drugie podejście to Xamarin Native, gdzie współdzielony jest tylko kod, a widoki pisane są pod każdą z platform. Co ciekawe, obecnie możemy już mieszać te dwa warianty. Nic nie stoi na przeszkodzie, aby w podejściu Xamarin.Forms umieszczać natywnie widok z Androida czy iOS.
Oczywiście współdzielony kod to ten stworzony w C#. Język ten obecnie rozwija się bardzo dynamicznie i jest niezmiernie uniwersalny. Wybór platformy .NET to możliwość programowania nie tylko w projektach mobilnych, ale także webowych, desktopowych lub IoT. Nie musimy także patrzeć z niepokojem na zmiany licencyjne, jak ma to miejsce z Oraclem i Javą. Użycie Xamarina i C# jest darmowe, podobnie jak narzędzia i środowisko programistyczne od Microsoftu.
Warto dodać, że Xamarin otrzymuje znaczącą ilość bibliotek do użycia w projekcie, a także olbrzymią społeczność zapaleńców. Framework pozwala także na dołączenie do projektu natywnych bibliotek napisanych w Javie oraz Objective-C.
Aplikacja napisana w Xmarinie jest równie szybka, jak natywna. Pod iOS kod jest bezpośrednio kompilowany do natywnego kodu maszynowego iOS (tak jakby kod była napisany w Objective-C). Pod Androidem kod Xamarina jest uruchamiany pod Mono obok silnika Java.
Na jakie systemy mobilne pisać aplikacje?
Mobilnych systemów operacyjnych do niedawana było całkiem sporo. Pamiętamy o Symbianie na telefony Nokia czy o Windowsie na smartfony, a także bardzo popularnym swego czasu BlackBerryOS. Obecnie na rynku liczą się tylko dwa systemy mobilne: Android i iOS. Niestety uniwersalna platforma UWP od Microsoftu nie wypaliła (stąd też tak duże zainteresowanie Xamarinem w Microsofcie) i póki coś się nie zmieni, nie warto wchodzić w ten segment.
Od strony dewelopera pamiętać trzeba o tym, że najwięcej użytkowników ma system od Google. Android ma ok 77% rynku, zaś iOS to niecałe 21%. Z drugiej strony to właśnie użytkownicy Apple są najbardziej hojni i najczęściej sięgają do wirtualnego portfela. Zatem najwięcej zarobić na płatnych aplikacjach można na iOS, na Androidzie bardziej popularne są aplikacje z reklamami lub mikropłatnościami.
Zaznaczyć także trzeba, że dostęp do sklepu Androida i iOS jest płatny. Deweloper chcący dodać do marketu Google aplikacje powinien jednorazowo zapłacić 25 dolarów. W sklepie Apple opłata wynosi zaś 99 dolarów i musi być uiszczana co roku.
Na koniec dodajmy kilka słów o wersjach systemów operacyjnych na jakie aplikacja powinna być pisana. Na iOS sytuacja jest prosta, niemalże każdy smartfon od Apple działa na najnowszej wersji systemu. Warto jednak asekuracyjnie wspierać jedną lub dwie wersje wcześniej (czyli obecnie mając wersję 12, zaleca ustawienie wsparcia systemu od wersji 10 i wyżej).
Na Androidzie jest niestety znacznie gorzej. Nie wszyscy producenci aktualizują chętnie swoje smartfony. Stąd też pomimo aktualnej wersji Androida 9 (Pie) zaleca się, aby wspierać system od wersji 4.4 (KitKat).
Przygotowanie środowiska pracy
Programowanie wymaga od nas wykorzystania środowiska deweloperskiego. Wybór może wielu zaskoczyć, ale nie jesteśmy skazani na Visual Studio pod Windowsa. Równie dobrze możemy programować w Xamarinie pod macOS. Microsoft rozwija bardzo energicznie Visual Studio for Mac, które de facto jest Xamarin Studio po rebrandingu, zaś ono wywodzi się bezpośrednio z MonoDevelop. Co ważne, oba wymienione wersje Visual Studio są darmowe (edycja Community).
Dodajmy jednak jakie są ograniczenia. Otóż chcąc programować pod Androida możemy użyć zarówno Visual Studio na Androida, jak i na macOS. Jednakże chcąc tworzyć aplikacje pod iOS musimy mieć komputer z macOS. Nie jesteśmy jednak zmuszani do pracy bezpośrednio na macOS. Można nadal programować w Visual Studio pod Windowsem, gdzie skompilujemy również kod pod Androida i iOS, aczkolwiek w sieci lokalnej musi być dostępny komputer z macOS, który pełnić będzie rolę build servera. Te ostatnie wyjście może wydawać się kłopotliwe, ale wcale tak nie jest. Xamarin sam przygotuje wszystko na macOS podczas instalacji Visual Studio. Dodatkowo, z tak skonfigurowanego komputera, może korzystać wielu programistów jednocześnie. W takich wypadkach może sprowadzić się świetnie Mac Mini (koniecznie z SSD i lepszym procesorem). Alternatywą są komputery Apple w chmurze, jak te dostępne przez serwis MacinCloud. Tutaj jednak płacimy za dostęp czasowy do usługi w sieci, co nie zawsze może być opłacalne (i szybkie) w dłuższej perspektywie czasu.
Warto zaznaczyć, że alternatywą do darmowego Visual Studio na macOS jest Rider od JetBrains, jednakże jest on płatny.
Wirtualny smartfon
W celach deweloperskich do programowania i (głównie) testowania używa się fizycznych urządzeń. Jednakże często w trakcie kodowania szybciej jest przetestować kod na wirtualnym urządzeniu.
Wraz z instalacją Xamarina dostajemy emulator Androida od Google. Osoby z procesorami Intela mogą skorzystać z przyspieszania sprzętowego dzięki HAXM. Użytkownicy AMD na Windowsie od niedawana mogą cieszyć się również nienagannym działaniem emulatora Androida dzięki Windows Hypervisor Platform, dostępnym wraz z kwietniową aktualizacją do Windows 10.
Z symulatorem iOS sytuacja jest zgoła inna. Otóż w teorii wirtualne urządzenie jest dostępne tylko na macOS. W praktyce jednak Xamarin umożliwia w Visual Studio na Windowsa odbieranie obrazu z symulatora iOS z macOS. Wszystko jest konfigurowane automatycznie przy instalacji Xamarina na macOS (należy jedynie pamiętać o zezwoleniu na logowanie zdalne). Pamiętać należy, że przy pracy z emulatorem czy symulatorem, mogą nie działać pewnie systemowe komponenty jak połączenia telefoniczne lub GPS.
Rozpoczynając pracę z Xamarin.Forms warto także zapoznać się z programem Xamarin Live Player. Pozwala on na niemalże natychmiastowe przesyłanie poprzez WiFi zmian w kodzie na uruchomioną aplikację na telefonie z Androidem. Jest to świetny sposób na naukę Xamarina na początek przygody z programowaniem mobilnym.
Zaczynamy!
Wejście w świat Xamarina nie jest skomplikowany. Podejście Xamarins.Forms jest świetne na sam początek i pozwala w razie potrzeby użycie bardziej zaawansowanych technik. Oczywiście pamiętać trzeba, że podstawą jest język C#, który będziemy używali przez cały czas pracy z kodem.
Na potrzeby wpisu używać będę Visual Studio na Windows w połączeniu z macOS do pokazania efektu pracy na symulatorze iOS.
Przygodę zaczniemy od stworzenia pustego projektu w Xamarin.Forms. Wybierając z menu File>New Project odnajdujemy projekt mobilny w Xamarin.Forms
W kolejnym oknie zaznaczmy tylko platformy Android oraz iOS, a także pusty szablon (Blank), używając .NET Standard.
Visual Studio stworzy za nas następujący szablon aplikacji:
Znajdziemy tutaj współdzielony projekt (DobraAplkacja.Xamarin), a także dedykowane projekty do każdej z platform (Android i iOS).
Stroną startową jest plik MainPage.xaml. W nim znajdują się znaczniki, które przekładane są na natywne kontrolki. Składnia jest bardzo podobna do popularnego WPFa. Otwórzmy zatem ten plik i zobaczmy co w nim jest.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DobraAplikacja.Xamarin"
x:Class="DobraAplikacja.Xamarin.MainPage">
<StackLayout>
<Label Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage>
Przykładowa strona zawiera StackLayout, który uszeregowuje kontrolki w stos (domyślnie w pionie). W tym przypadku mamy tekst z napisem "Welcome to Xamarin.Forms!"
Zmodyfikujemy trochę kod. Dodajmy do elementu Label (tekst) wartość Name, aby móc odwołać się do niej z poziomu kodu. Dorzućmy także przycisk, po kliknięciu którego będziemy zmieniali domyślny napis w wyświetlanej kontrolce. Po zmianach kod będzie wyglądał następująco:
<StackLayout>
<Label Text="Welcome to Xamarin.Forms!"
x:Name="WelcomeLabel"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Button Text="Click me"
Clicked="Button_Clicked" />
</StackLayout>
Element Button zawiera wywołanie zdarzenia Button_Clicked, którego ciało znajdziemy w MainPage.xaml.cs. Plik ten odpowiada za obsługę widoku we wzorcu projektowym MVP (obecnie niemalże nieużywanym, ale świetnym do szybkiej nauki).
private void Button_Clicked(object sender, EventArgs e) {
WelcomeLabel.Text = "Welcome to DobraAplikacja!";
}
Metoda podmienia po kliknięciu tekst w kontrolce. Warto dodać także, że Visual Studio będzie w stanie pokazać nam podgląd widoku jaki tworzymy w xaml. Oczywiście w bardziej zaawansowanych widokach nie będzie to już takie proste, ale w naszym przypadku IDE pokazuje podgląd bezbłędnie.
Możemy już uruchomić naszą pierwszą aplikację na emulatorze Androida i symulatorze iOS. Oto jak będzie prezentować się aplikacja po kliknięciu na przycisk w obu systemach:
Koniec? Nie, to dopiero początek
Przygodę z programowaniem na urządzenia mobilne można zacząć w każdej chwili. Wybranie narzędzi od Microsoftu i rozpoczęcie pracy nad pierwszą aplikacją nie wymaga ponoszenia kosztów licencyjnych związanych z użyciem języka czy narzędzi. Jedyne opłaty jakie musimy uiścić to te związane z wykupieniem kont deweloperskich w poszczególnych marketach od Apple i Google.
Samo programowanie nie jest bardzo wymagające w podejściu Xamarin.Forms. Jeden widok w xaml generuje dwie aplikacje pod Androida i iOS. Pomimo ograniczeń (brak łatwego użycia elementów charakterystycznych dla danej platformy) jest to podejście bardzo atrakcyjne. Zaoszczędzić możemy dużo czasu współdzieląc kod i widoki. Świetnie sprawdzi się w pierwszych aplikacjach i niewielkich projektach, a w razie czego można też użyć podejścia natywnego (Xamarin Native) w już istniejącym kodzie.
Krótkie wprowadzenie bazuje na podejściu MVP, ale w większych projektach stosuje się wzorzec MVVM używając bibliotek MvvmCross czy MVVM Light. Dodatkowo warto użyć także pakietu Xamarin.Essentials, który opakowuje najbardziej użyteczny kod do komunikacji z systemem w jedno API. Przykładowy kod należy potraktować jako zachętę do zagłębienia się w temat aplikacji mobilnych budowanych o platformę Xamarin. Do czego gorąco zachęcam.
Dodatek od naszego partnera
Jeśli zainteresował Was ten temat, to nasz partner, firma Udemy, przygotowała okazji nadchodzącego Czarnego Piątku specjalną ofertę na kursy, w na wiele kursów poświęconych programowaniu.