Xamarin Forms, MVVMCross și SkiaSharp: Sfânta Treime a dezvoltării aplicațiilor multiplatforme

Publicat: 2022-03-11

Vorbiți despre stabilirea așteptărilor mari. Sfânta Treime, nimic mai puțin!

Adevărul este că dezvoltarea aplicațiilor mobile este costisitoare atunci când vizați mai multe platforme, deoarece nu există un cod partajat. Apple vă cere să codificați în Objective-C sau Swift, Android vă cere să codificați în Java, iar WinPhone vă cere să dezvoltați în .NET, adesea C#. Adăugați la aceasta multitudinea de biblioteci pe care fiecare platformă le oferă pentru a gestiona hărți, desene, imagini sau GPS - este nevoie de o cantitate enormă de timp și cunoștințe pentru a construi o singură aplicație mobilă.

Dezvoltare de aplicații pe mai multe platforme cu Xamarin Forms, MVVMCross și SkiaSharp

Inutil să spun că majoritatea startup-urilor nu își pot permite să-și tripleze cheltuielile, iar chiar și afacerile consacrate pot avea dificultăți să justifice prețul de intrare în spațiul mobil.

În acest articol, veți afla cum Xamarin Forms, în combinație cu MVVMCross și SkiaSharp, poate fi o modalitate viabilă de a construi aplicații mobile pe mai multe platforme, fără a compromite familiaritatea, performanța și unicitatea. Articolul va analiza aceste trei tehnologii și modul în care pot reduce costurile de dezvoltare permițând reutilizarea maximă a codului pe mai multe platforme mobile.

O problemă importantă

Problema dezvoltării aplicațiilor mobile pe mai multe platforme este reală și, ca atare, de-a lungul anilor au apărut multe soluții diferite pentru a reduce costurile de dezvoltare prin partajarea codului între platforme. În industria jocurilor video, de exemplu, toate motoarele de jocuri majore oferă o soluție multiplatformă, chiar și Unreal și Unity vizează telefoanele mobile și tabletele.

În ceea ce privește aplicațiile, au existat mai multe încercări de a conduce această piață multiplatformă de-a lungul anilor. Mulți au rămas fără probleme și s-au pierdut în abis, dar câțiva dintre ei încă supraviețuiesc după mai mulți ani. Printre acestea se numără Xamarin, singura soluție .NET care oferă suport pentru toate cele trei platforme mobile.

Nativ sau nu, aici vin

Deci există un război între diferite soluții și cine spune că războiul înseamnă propagandă!

Războiul se duce mai ales pe frontul marelui N : a fi nativ! Trebuie să fii atent la cuvânt pentru că nu are un sens clar. Este cel mai folosit cuvânt în lumea dezvoltării mobile în zilele noastre și este foarte la modă. Adevărul este că nimeni nu este de acord cu ceea ce înseamnă de fapt.

Când selectați un cadru multiplatform, toate opțiunile „native” nu sunt egale, așa că aveți grijă, este posibil să comparați merele cu portocale. Pentru unii este vorba despre limbajul de programare, pentru alții este vorba de a putea folosi caracteristicile hardware, alții cred că este vorba de utilizarea API-urilor/UI de platformă și de multe ori este vorba doar de a nu fi o aplicație web.

Există argumente de fiecare parte a dezbaterii și nu am de gând să aprofundez pentru că este inutil. De ce este inutil? Ei bine, permiteți-mi să vă spun un fapt greu de înghițit: utilizatorilor dvs. finali nu le pasă!

Da, ai citit bine, doar programatorilor tăi le pasă. Utilizatorul dvs. final nu va alege niciodată aplicația dvs. din cauza tehnologiei de bază: va alege aplicația dvs. deoarece răspunde la problema lor și oferă o experiență bună.

Deci, în loc să ne luptăm pentru semnificația unui cuvânt, să ne uităm la modul în care Xamarin oferă o modalitate eficientă de a oferi utilizatorilor ceea ce le pasă.

Tatăl, Fiul și Duhul Sfânt

Înainte de a trece mai departe, să clarificăm doar cele trei elemente care cuprind soluția noastră la problema dezvoltării multiplatforme.

Tatăl: Xamarin

După cum sa menționat anterior, Xamarin este o soluție .NET pentru dezvoltarea aplicațiilor mobile și desktop. A fost achiziționat de Microsoft în 2016, dar a fost datat cu aproximativ patru ani în urmă cu proiectul Mono. În prezent, are trei soluții: Xamarin.iOS, Xamarin.Android și Xamarin.Mac. Celelalte platforme gestionează deja aplicațiile .NET implicit, fiind soluții Microsoft. Pe scurt, Xamarin oferă o legătură directă către API-urile platformei în .NET. Prin urmare, puteți utiliza funcții native dintr-o aplicație .NET. Există, de asemenea, un modul de extensie pentru Xamarin numit Forms, care oferă un strat de abstractizare pentru UI.

Fiul: SkiaSharp

SkiaSharp este un wrapper .NET peste biblioteca de grafică vectorială Skia de la Google. Skia este motorul de randare nativ pentru Android, Chrome, ChromeOS și Firefox. Cu SkiaSharp, puteți utiliza biblioteca din aplicația dvs. .NET pentru a o face pe mai multe platforme. Aceasta înseamnă că umbra îngrijită pe care designerul tău spune că „va face aplicația ta mult mai bună” poate fi codificată o singură dată în loc să fie repetată pentru fiecare platformă țintă. Personal, cred că cea mai bună caracteristică a sa este capacitatea de a reda grafica SVG într-un mod care să vă permită să preveniți duplicarea diferiților factori de formă, păstrând în același timp o randare clară, perfectă a pixelilor.

Duhul Sfânt: MVVMCross

Pentru a menține totul bine separat și lejer cuplat, soluția noastră sfințită se va baza pe MVVMCross. Acest cadru implementează o infrastructură MVVM (Model-View-ViewModel), astfel încât totul să poată fi menținut independent. Fără a deveni prea tehnice, aplicațiile sunt în general împărțite în trei părți:

  1. Modelul: O reprezentare de memorie a datelor noastre
  2. Vizualizarea: interfața noastră de utilizare, prezentând datele și acțiunile utilizatorilor
  3. Modelul de vizualizare: stratul care leagă modelul nostru de vizualizarea noastră și invers

În ingineria software, ne străduim întotdeauna să păstrăm vizualizarea separată de ViewModel, astfel încât logica aplicației (în ViewModel) să poată fi reutilizată chiar dacă modificăm reprezentarea vizuală. MVVMCross ne ajută să realizăm exact acest lucru prin gestionarea legăturilor de date și furnizarea de modele și instrumente pentru abstracția platformei.

Ce le pasă utilizatorilor finali

Doar pentru a recapitula, există diferite lucruri care diferențiază aplicațiile de succes de cele proaste. O aplicație de succes:

  1. Rezolvă o problemă din viața reală
  2. Oferă o experiență plăcută

Punctul numărul 1, evident, nu are nimic de-a face cu cadrul pe care îl alegeți. Deci, să ne concentrăm asupra punctului numărul 2. Există trei aspecte majore care contribuie la plăcerea aplicației dvs.:

  1. Familiaritate
  2. Performanţă
  3. Unicitatea

Familiaritate

Familiaritatea se referă la ușurința în utilizare și la găsirea rapidă a aplicației.

Cu alte cuvinte, este vorba despre utilizarea diferitelor paradigme ale interfeței cu utilizatorul ale platformei într-o manieră coerentă la nivelul întregului sistem. De exemplu, lucruri simple, cum ar fi pozițiile butoanelor, acțiunile din contextul listei sau navigarea, toate contribuie la familiaritatea aplicației dvs.

Familiaritatea este principalul punct slab al aplicațiilor web sau cadrelor bazate pe o interfață web. Xamarin Forms, pe de altă parte, oferă mapări pe mai multe platforme la elementele UI furnizate de furnizor.

Prin urmare, utilizatorii tăi beneficiază de o experiență conformă cu aspectul și senzația generală a platformei, astfel încât se vor simți intuitiv în largul tău în aplicația ta.

Performanţă

Sincer, menționarea „nativ” în propaganda ta de marketing nu înseamnă nimic. Luați Jasonette ca exemplu care este „nativ prin HTTP”. Interfața de utilizare este stocată pe un server web... salut călătorii dus-întors și încetiniri, așa că vedem că nativ nu poate fi neapărat presupus că implică performanțe mai bune!

Așadar, cu acel mit în afara drumului, atunci când ne uităm la benchmark-uri din viața reală, Xamarin iese ca soluție cea mai bine rotunjită în ceea ce privește performanța. Xamarin Forms, care nu necesită mult mai multe schimbări de context, oferă performanțe comparabile cu aplicațiile în limba maternă.

Concluzia mea este că alegerile dvs. de implementare sunt cele care vă pot încetini aplicația, mai degrabă decât Xamarin față de limba nativă. Alte opțiuni sunt într-un dezavantaj clar în ceea ce privește performanța.

Unicitatea

Posibilitatea ca designerii dvs. de a crea o aplicație cu aspect unic este, de asemenea, foarte importantă de luat în considerare dacă doriți să oferiți cea mai bună experiență de utilizator posibilă și să vă diferențiați aplicația.

De multe ori, unicitatea implică crearea de controale, animații sau gesturi personalizate. Atunci când nu este ușor disponibil în Xamarin, puteți utiliza SkiaSharp (un înveliș în jurul bibliotecii de randare a graficelor vectoriale Skia de la Google) și puteți profita de conceptul de randare personalizat al Xamarin Forms pentru a vă apropia cât mai mult de hardware, în timp ce codați întotdeauna într-un singur limbajul, ceva ce celelalte soluții nu pot oferi.

La ce îți pasă ca afacere

În acest moment, cel mai probabil vă gândiți că alegerea cadrului este și o decizie de afaceri. În afară de factorii din afara domeniului acestui articol, cum ar fi disponibilitatea resurselor umane, Xamarin are multe de oferit, mai ales atunci când este cuplat cu MVVMCross. Voi detalia patru aspecte pe care veți dori să le luați în considerare în decizia dvs.:

  1. Preț și costuri de dezvoltare
  2. Reutilizarea codului
  3. Disponibilitatea componentelor
  4. Sprijin și comunitate

Preț și costuri de dezvoltare

Să-l scoatem pe acesta din drum. De la începutul acestui an, Xamarin este gratuit pentru freelanceri și întreprinderile mici, cum ar fi startup-urile (cu Visual Studio Community Edition). Pentru organizațiile mai mari, vine „liber” cu o licență Visual Studio pe care este posibil să o aveți deja. Xamarin Forms, MVVMCross și SkiaSharp sunt, de asemenea, toate gratuite și open source pentru a completa!

După cum am menționat deja, trecerea pe ruta .Net cu Xamarin vă permite să vă dezvoltați aplicațiile într-o singură limbă de la început până la sfârșit. Majoritatea celorlalte soluții de acolo necesită ca programatorii dvs. să cunoască diferite limbi. În cazul Cordova, de exemplu, trebuie să cunoașteți fluent nu numai HTML, Javascript, CSS, ci și eventual Objective-C, Java și/sau C# dacă aveți nevoie să accesați API-urile furnizorilor care nu au un plugin disponibil. .

Varietatea limbilor folosite face ca mai multe schimbări de context și mai multe instrumente de stăpânit, ceea ce duce la scăderea eficienței. Xamarin, pe de altă parte, este o soluție all-in-one: din Visual Studio construiți, implementați și depanați pe toate platformele.

Deși nu are legătură directă cu Xamarin, obțineți și o mulțime de caracteristici în C# care accelerează dezvoltarea prin alegerea soluției .Net. Și anume, beneficiați de caracteristicile grozave din C# 4.5+, cum ar fi multi-threading ușor cu asincron/așteptare, închideri și reflectare, toate acestea fiind dovedite că îmbunătățesc eficiența.

Reutilizarea codului

Probabil că v-ați gândit la reutilizarea codului și, cel mai probabil, considerați că toate soluțiile sunt oarecum echivalente în acest sens. Îmi pare rău să spun prietene, dar te înșeli!

Programatorii dintre voi s-ar fi întrebat de ce pe Pământ aș propune utilizarea MVVMCross peste stratul MVVM care este încorporat în Forms? Ei bine, iată ceva de luat în considerare: într-adevăr construiți doar aplicații mobile?

Izolând logica aplicației cu MVVMCross și folosind inversarea controlului pe care o oferă, poți reutiliza o cantitate maximă de cod pe mobil, dar și pe Windows și Mac (pentru că Xamarin.Mac este prietenul tău).

Nu numai că vă va economisi bani, ci va propune și bune practici de inginerie care vă vor reduce costurile de întreținere a codului.

Disponibilitatea componentelor

Poate că nu ești ca mine, dar urăsc să reinventez roata. Prin urmare, a avea acces la componentele existente pe care le puteți integra cu ușurință în aplicația dvs. este crucial pentru a vă accelera timpul de lansare pe piață și, de multe ori, vă va reduce costurile în același timp.

Alegerea Xamarin și MVVMCross vă oferă două opțiuni pentru a alege componentele existente. În primul rând, din ce în ce mai multe componente sunt disponibile pentru Xamarin cu sau fără formulare. Xamarin are un Magazin de componente integrat în Visual Studio, unde puteți găsi diverse soluții la problemele comune ale aplicațiilor, iar alte companii vând direct, așa că asigurați-vă că căutați înainte de a începe să scrieți propriile componente (sau luați în considerare să le vindeți odată ce sunt construite).

În al doilea rând, veți dori să căutați pachetele Nuget, deoarece sunt șanse ca cineva a scris deja cod pentru a face ceea ce aveți nevoie. Printre aceste pachete, veți găsi o listă decentă de pluginuri MVVMCross multi-platformă care vor rezolva probleme comune precum e-mailul, GPS-ul sau localizarea.

Dacă aveți deja experiență cu C#, probabil că aveți componentele preferate. Desigur, nu vrei să le dai drumul, se simt atât de confortabil. Fiți siguri că puteți crea legături C# pentru componentele existente și apoi le puteți folosi ca și cum ar fi fost incluse cu Xamarin, chiar și în Formulare, cu puțin ajutor de la randerii personalizate.

Apropo de asta, ar putea dori să aruncați o privire la depozitul Github de legături Xamarin înainte de a vă crea propriul dvs.

Sprijin și comunitate

În cele din urmă, accesul la suport și exemple este un factor foarte important în alegerea unui cadru. Xamarin există de ceva vreme, așa că comunitatea este de o dimensiune destul de bună astăzi.

Căutând informații pe Google, de obicei, rezultă un număr destul de mare de răspunsuri (sfat: încercați și căutările pentru monotouch și monodroid, strămoșii lui Xamarin), iar Xamarin oferă o mulțime de exemple și documentație grozavă pe site-ul lor.

În plus, deoarece Xamarin este într-adevăr doar o legătură cu API-urile furnizorului, documentația Apple și Google este întotdeauna relevantă și va răspunde la multe dintre întrebările dvs. Puteți crea apoi propriul serviciu MVVMCross pentru a abstrage API-urile furnizorului din codul dvs. partajat.

În ceea ce privește viitorul Xamarin, odată cu achiziția sa în martie trecut de către Microsoft, pariul meu este că nu merge nicăieri decât înainte. De la acea vânzare și de la trecerea la un model free-ish, comunitatea a crescut, suportul s-a îmbunătățit, iar produsul a continuat să se îmbunătățească, eventual, chiar și într-un ritm mai rapid!

Viitorul pare luminos pentru Xamarin.

Să ne pregătim pentru a bubuit!

Sunt conștient de faptul că s-ar putea să deschid o cutie de viermi cu acest articol. Acum să nu mă înțelegeți greșit, există și alte opțiuni care merită luate în considerare și vă invit să faceți acest lucru, deoarece preocupările mele s-ar putea să nu fie aceleași cu ale voastre.

Rețineți că, dacă aveți o cronologie de șase săptămâni și patru luni mai târziu, încă nu aveți o aplicație pregătită, nu câștigați. Asta ar lăsa două luni și jumătate și o mulțime de bani pentru a instrui pe cineva în interior sau pentru a angaja pe cineva cu cunoștințe. A insista asupra construirii unei aplicații „native” în acel moment poate fi destul de dăunător pentru soarta proiectului dumneavoastră.

Xamarin și aceste tehnologii însoțitoare oferă exact ceea ce le pasă utilizatorilor și ceea ce aveți nevoie. Sper că acest articol vă va ajuta să luați o decizie bine informată cu privire la cadrul pe care îl puteți alege pentru următoarea aplicație mobilă.

Înrudit: Aplicații Android mai bune care utilizează MVVM cu arhitectură curată