Xamarin Forms, MVVMCross i SkiaSharp: Święta Trójca międzyplatformowego tworzenia aplikacji
Opublikowany: 2022-03-11Porozmawiaj o stawianiu wysokich oczekiwań. Święta Trójca, nic mniej!
Prawda jest taka, że tworzenie aplikacji mobilnych jest kosztowne, gdy kierujesz się na wiele platform, ponieważ nie ma wspólnego kodu. Apple wymaga kodowania w Objective-C lub Swift, Android wymaga kodowania w Javie, a WinPhone wymaga programowania w .NET, często C#. Dodaj do tego mnóstwo bibliotek udostępnianych przez każdą platformę do obsługi map, rysunków, obrazów lub GPS — zbudowanie jednej aplikacji mobilnej wymaga ogromnej ilości czasu i wiedzy.
Nie trzeba dodawać, że większość startupów nie może sobie pozwolić na potrojenie swoich wydatków, a nawet firmy o ugruntowanej pozycji mogą mieć trudności z uzasadnieniem ceny wejścia do przestrzeni mobilnej.
W tym artykule dowiesz się, jak Xamarin Forms w połączeniu z MVVMCross i SkiaSharp może być realnym sposobem tworzenia wieloplatformowych aplikacji mobilnych bez uszczerbku dla znajomości, wydajności i unikalności. W artykule omówimy te trzy technologie i sposób, w jaki mogą one obniżyć koszty rozwoju, umożliwiając maksymalne ponowne wykorzystanie kodu na wielu platformach mobilnych.
Ważny problem
Problem tworzenia wieloplatformowych aplikacji mobilnych jest realny i w związku z tym na przestrzeni lat pojawiło się wiele różnych rozwiązań mających na celu zmniejszenie kosztów rozwoju poprzez współdzielenie kodu między platformami. Na przykład w branży gier wideo wszystkie główne silniki gier zapewniają rozwiązanie wieloplatformowe, nawet firmy Unreal i Unity są ukierunkowane na telefony komórkowe i tablety.
Na froncie aplikacji przez lata podejmowano wiele prób prowadzenia tego wieloplatformowego rynku. Wielu nie udało się i zaginęło w otchłani, ale kilka z nich po wielu latach przeżyło. Wśród nich jest Xamarin, jedyne rozwiązanie .NET oferujące obsługę wszystkich trzech platform mobilnych.
Natywny czy nie, oto nadchodzę
Więc toczy się wojna między różnymi rozwiązaniami i kto mówi, że wojna to propaganda!
Wojna toczy się głównie na froncie wielkiego N : bycie tubylcem! Musisz uważać na to słowo, ponieważ nie ma ono jasnego znaczenia. Jest to obecnie najczęściej używane słowo w świecie programowania mobilnego i jest bardzo modne. Prawda jest taka, że nikt nie zgadza się, co to właściwie oznacza.
Wybierając platformę wieloplatformową, wszystkie „natywne” opcje nie są równe, więc uważaj, być może porównujesz jabłka z pomarańczami. Dla niektórych chodzi o język programowania, dla innych o możliwość korzystania z funkcji sprzętowych, inni myślą, że chodzi o korzystanie z interfejsów API/UI platformy, a często chodzi tylko o to, aby nie być aplikacją internetową.
Po każdej stronie debaty są spory i nie zamierzam kopać głębiej, ponieważ jest to bezużyteczne. Dlaczego jest bezużyteczny? Cóż, powiem ci trudny do przełknięcia fakt: twoi użytkownicy końcowi nie dbają o to!
Tak, dobrze to przeczytałeś, obchodzi to tylko twoich programistów. Twój użytkownik końcowy nigdy nie wybierze Twojej aplikacji ze względu na podstawową technologię: wybierze Twoją aplikację, ponieważ rozwiąże jej problem i zapewni dobre wrażenia.
Dlatego zamiast walczyć o znaczenie słowa, spójrzmy, jak Xamarin zapewnia skuteczny sposób na zapewnienie użytkownikom tego, na czym im zależy.
Ojciec, Syn i Duch Święty
Zanim przejdziemy dalej, wyjaśnijmy tylko trzy elementy, które składają się na nasze rozwiązanie problemu rozwoju międzyplatformowego.
Ojciec: Xamarin
Jak wspomniano wcześniej, Xamarin to rozwiązanie .NET do tworzenia aplikacji mobilnych i stacjonarnych. Został zakupiony przez Microsoft w 2016 roku, ale datowany na około cztery lata temu z projektem Mono. Obecnie posiada trzy rozwiązania: Xamarin.iOS, Xamarin.Android i Xamarin.Mac. Inne platformy domyślnie obsługują już aplikacje .NET, będąc rozwiązaniami firmy Microsoft. Krótko mówiąc, Xamarin oferuje bezpośrednie łącze do interfejsów API platformy w .NET. W związku z tym można korzystać z funkcji natywnych z aplikacji .NET. Istnieje również moduł rozszerzeń dla platformy Xamarin o nazwie Forms, który zapewnia warstwę abstrakcji dla interfejsu użytkownika.
Syn: SkiaSharp
SkiaSharp to opakowanie .NET nad biblioteką grafiki wektorowej Skia firmy Google. Skia to natywny silnik renderujący dla systemów Android, Chrome, ChromeOS i Firefox. Dzięki SkiaSharp możesz użyć biblioteki w swojej aplikacji .NET, aby uczynić ją międzyplatformową. Oznacza to, że schludny cień, który według projektanta „sprawi, że Twoja aplikacja będzie znacznie lepsza”, może zostać zakodowany tylko raz, zamiast powtarzać się dla każdej platformy docelowej. Osobiście uważam, że jego najlepszą cechą jest możliwość renderowania grafiki SVG w sposób, który pozwala zapobiec duplikowaniu różnych czynników kształtu przy jednoczesnym zachowaniu wyraźnego, perfekcyjnego renderowania.
Duch Święty: MVVMKrzyż
Aby wszystko było dobrze rozdzielone i luźno połączone, nasze uświęcone rozwiązanie będzie polegać na MVVMCross. Ta struktura implementuje infrastrukturę MVVM (Model-View-ViewModel), dzięki czemu wszystko może być niezależne. Bez zbytniego wchodzenia w szczegóły, aplikacje są generalnie podzielone na trzy części:
- Model: reprezentacja pamięci naszych danych
- Widok: nasz interfejs użytkownika, prezentujący dane i działania użytkownikom
- ViewModel: Warstwa, która łączy nasz Model z naszym Widokiem i na odwrót
W inżynierii oprogramowania zawsze staramy się oddzielić widok od ViewModel, aby logika aplikacji (w ViewModel) mogła być ponownie wykorzystana, nawet jeśli zmienimy reprezentację wizualną. MVVMCross pomaga nam to osiągnąć, obsługując powiązania danych oraz dostarczając wzorce i narzędzia do abstrakcji platformy.
O co dbają użytkownicy końcowi
Podsumowując, istnieją różne rzeczy, które odróżniają udane aplikacje od złych. Udana aplikacja:
- Rozwiązuje prawdziwy problem życiowy
- Oferuje przyjemne doświadczenie
Punkt 1 oczywiście nie ma nic wspólnego z wybranym przez Ciebie frameworkiem. Skoncentrujmy się więc na punkcie 2. Istnieją trzy główne aspekty, które przyczyniają się do zadowolenia z Twojej aplikacji:
- Znajomość
- Występ
- Wyjątkowość
Znajomość
Znajomość odnosi się do łatwości użytkowania i szybkiego poruszania się po aplikacji.
Innymi słowy, chodzi o wykorzystanie różnych paradygmatów interfejsu użytkownika platformy w spójny dla całego systemu sposób. Na przykład proste rzeczy, takie jak pozycje przycisków, czynności związane z kontekstem listy lub nawigacja, przyczyniają się do lepszego poznania Twojej aplikacji.
Znajomość jest głównym słabym punktem aplikacji internetowych lub frameworków opartych na interfejsie internetowym. Z drugiej strony Xamarin Forms zapewnia mapowania międzyplatformowe do elementów interfejsu użytkownika dostarczonych przez dostawcę.
Dzięki temu Twoi użytkownicy otrzymują wrażenia, które są zgodne z ogólnym wyglądem platformy, dzięki czemu intuicyjnie będą czuli się swobodnie w Twojej aplikacji.
Występ
Szczerze mówiąc, wzmianka o „rodzimym” w swojej propagandzie marketingowej nic nie znaczy. Weźmy za przykład Jasonette, który jest „natywny przez HTTP”. Interfejs użytkownika jest przechowywany na serwerze sieciowym… witaj w obie strony i spowolnienia, więc widzimy, że natywny niekoniecznie oznacza lepszą wydajność!
Więc po usunięciu tego mitu, patrząc na rzeczywiste testy porównawcze, Xamarin okazuje się najbardziej wszechstronnym rozwiązaniem pod względem wydajności. Xamarin Forms, nie wymagając znacznie większej liczby przełączników kontekstu, oferują porównywalną wydajność do aplikacji w języku natywnym.

Mój wniosek jest taki, że Twoje wybory dotyczące implementacji mogą spowolnić Twoją aplikację, a nie Xamarin w porównaniu z językiem ojczystym. Inne dostępne opcje są wyraźnie niekorzystne pod względem wydajności.
Wyjątkowość
Możliwość stworzenia przez Twoich projektantów wyjątkowo wyglądającej aplikacji jest również bardzo ważna, jeśli chcesz zapewnić użytkownikom jak najlepsze wrażenia i wyróżnić swoją aplikację.
Wielokrotnie wyjątkowość oznacza tworzenie niestandardowych kontrolek, animacji lub gestów. Gdy nie jest łatwo dostępny w Xamarin, możesz użyć SkiaSharp (opakowania wokół biblioteki renderowania grafiki wektorowej Google Skia) i skorzystać z niestandardowej koncepcji renderowania Xamarin Forms, aby zbliżyć się do sprzętu tak blisko, jak to konieczne, zawsze kodując w jednym język, coś, czego inne rozwiązania nie są w stanie zaoferować.
Na czym Ci zależy jako firmie
W tym momencie najprawdopodobniej myślisz, że wybór frameworka to także decyzja biznesowa. Oprócz czynników wykraczających poza zakres tego artykułu, takich jak dostępność zasobów ludzkich, Xamarin ma wiele do zaoferowania, zwłaszcza w połączeniu z MVVMCross. Omówię cztery aspekty, które będziesz chciał wziąć pod uwagę przy podejmowaniu decyzji:
- Cena i koszty rozwoju
- Ponowne użycie kodu
- Dostępność komponentów
- Wsparcie i społeczność
Cena i koszty rozwoju
Usuńmy to z drogi. Od początku tego roku Xamarin jest bezpłatny dla freelancerów i małych firm, takich jak start-upy (z Visual Studio Community Edition). W przypadku większych organizacji jest on dostępny „za darmo” z licencją Visual Studio, którą być może już masz. Xamarin Forms, MVVMCross i SkiaSharp są również bezpłatne i mają otwarte oprogramowanie, co jest dopełnieniem!
Jak już wspomniałem, przejście ścieżką .Net z Xamarinem pozwala na tworzenie aplikacji w jednym języku od początku do końca. Większość innych rozwiązań wymaga od programistów znajomości różnych języków. W przypadku Cordova, na przykład, musisz biegle posługiwać się nie tylko HTML, Javascript, CSS, ale także być może Objective-C, Java i/lub C#, jeśli potrzebujesz dostępu do interfejsów API dostawców, które nie mają dostępnej wtyczki .
Różnorodność używanych języków sprawia, że istnieje więcej zmian kontekstu i więcej narzędzi do opanowania, co prowadzi do zmniejszenia wydajności. Z drugiej strony platforma Xamarin to rozwiązanie typu „wszystko w jednym”: w programie Visual Studio tworzysz, wdrażasz i debugujesz na wszystkich platformach.
Chociaż nie jest to bezpośrednio związane z Xamarinem, otrzymujesz również wiele funkcji w języku C#, które przyspieszają tworzenie, wybierając rozwiązanie .Net. Mianowicie, czerpiesz korzyści z doskonałych funkcji w C# 4.5+, takich jak łatwe wielowątkowość z asynchronią/oczekiwaniem, zamknięciami i odbiciem, które, jak wykazano, poprawiają wydajność.
Ponowne użycie kodu
Zapewne myślałeś o ponownym wykorzystaniu kodu i najprawdopodobniej uważasz, że wszystkie rozwiązania są pod tym względem w pewnym stopniu równoważne. Przykro mi, że mówię kolego, ale się mylisz!
Programiści wśród was mogli się zastanawiać, dlaczego na Ziemi miałbym zaproponować użycie MVVMCross nad warstwą MVVM, która jest wbudowana w Formularze? Cóż, jest coś do rozważenia: czy naprawdę tworzysz tylko aplikacje mobilne?
Izolując logikę aplikacji za pomocą MVVMCross i korzystając z odwróconej kontroli, którą zapewnia, możesz ponownie wykorzystać maksymalną ilość kodu na urządzeniach mobilnych, ale także na systemach Windows i Mac (ponieważ Xamarin.Mac jest Twoim przyjacielem).
Nie tylko pozwoli Ci to zaoszczędzić pieniądze, ale także wprowadzi dobre praktyki inżynierskie, które obniżą koszty utrzymania kodu.
Dostępność komponentów
Może nie jesteś taki jak ja, ale nienawidzę wymyślania koła na nowo. Dlatego posiadanie dostępu do istniejących komponentów, które można łatwo zintegrować ze swoją aplikacją, ma kluczowe znaczenie dla przyspieszenia czasu wprowadzania produktów na rynek, a często jednocześnie obniży koszty.
Wybór Xamarin i MVVMCross oferuje dwie opcje do wyboru istniejących komponentów. Po pierwsze, coraz więcej składników jest dostępnych dla platformy Xamarin z formularzami lub bez nich. Platforma Xamarin ma zintegrowany z programem Visual Studio magazyn składników, w którym można znaleźć różne rozwiązania typowych problemów z aplikacjami, a inne firmy sprzedają je bezpośrednio, więc należy przeprowadzić wyszukiwanie, zanim zaczniesz pisać własne składniki (lub rozważ ich sprzedaż po ich zbudowaniu).
Po drugie, będziesz chciał przeszukać pakiety Nuget, ponieważ jest szansa, że ktoś już napisał kod, aby zrobić to, czego potrzebujesz. Wśród tych pakietów znajdziesz przyzwoitą listę wieloplatformowych wtyczek MVVMCross, które rozwiążą typowe problemy, takie jak e-mail, GPS czy lokalizacja.
Jeśli masz już doświadczenie w C#, prawdopodobnie masz preferowane składniki. Oczywiście nie chcesz pozwolić im odejść, czują się tak komfortowo. Zapewniamy, że możesz tworzyć powiązania C# dla istniejących składników, a następnie używać ich tak, jakbyśmy byli w pakiecie z platformą Xamarin, nawet w formularzach z niewielką pomocą niestandardowych programów renderujących.
Skoro o tym mowa, możesz chcieć zajrzeć do repozytorium Github powiązań Xamarin przed utworzeniem własnego.
Wsparcie i społeczność
Wreszcie dostęp do wsparcia i przykładów jest bardzo ważnym czynnikiem przy wyborze frameworka. Xamarin istnieje już od jakiegoś czasu, więc społeczność jest dziś całkiem spora.
Wyszukiwanie informacji w Google zwykle daje sporą liczbę odpowiedzi (wskazówka: wypróbuj także wyszukiwania monotouch i monodroid, przodkowie Xamarin), a Xamarin oferuje wiele przykładów i świetną dokumentację na swojej stronie internetowej.
Co więcej, ponieważ Xamarin tak naprawdę jest tylko powiązaniem z interfejsami API dostawców, dokumentacja Apple i Google jest zawsze aktualna i odpowie na wiele twoich pytań. Następnie możesz utworzyć własną usługę MVVMCross, aby wyodrębnić interfejsy API dostawców w kodzie udostępnionym.
Jeśli chodzi o przyszłość Xamarin, po przejęciu go przez Microsoft w marcu ubiegłego roku, założę się, że nie zmierza nigdzie poza naprzód. Od czasu tej wyprzedaży i dopasowania do modelu darmowego społeczność tylko się rozrosła, wsparcie się poprawiło, a produkt poprawiał się, być może nawet w szybszym tempie!
Przyszłość rysuje się przed Xamarin w jasnych barwach.
Przygotujmy się na rozróbę!
Zdaję sobie sprawę, że tym artykułem mogę otwierać puszkę robaków. Nie zrozum mnie źle, istnieją inne opcje warte rozważenia i zapraszam do tego, ponieważ moje obawy mogą nie być takie same jak twoje.
Pamiętaj, że jeśli masz sześciotygodniową oś czasu, a cztery miesiące później nadal nie masz gotowej aplikacji, nie wygrywasz. Pozostawiłoby to dwa i pół miesiąca i mnóstwo pieniędzy na szkolenie kogoś na miejscu lub zatrudnienie kogoś posiadającego wiedzę. Naleganie na zbudowanie „natywnej” aplikacji w tym momencie może być bardzo szkodliwe dla losu twojego projektu.
Platforma Xamarin i te technologie towarzyszące zapewniają dokładnie to, na czym zależy użytkownikom i czego potrzebujesz. Mam nadzieję, że ten artykuł pomoże Ci podjąć świadomą decyzję dotyczącą frameworka, który możesz wybrać dla swojej następnej aplikacji mobilnej.