Mijają właśnie dwa lata odkąd postanowiłem rozpocząć pracę z platformą Xamarin. Pomyślałem, że jest to dobra okazja, żeby sprawdzić jak wygląda, tak chwalony przez twórców tego ekosystemu, wysoki poziom współdzielenia kodu między systemami.
Jako że za przykłady posłużą mi projekty w których uczestniczyłem ja i moi koledzy, będą to systemy Android oraz iOS w projektach typu Xamarin.Native oraz Xamarin.Forms.
Metoda liczenia
Dane, które posłużyły do porównania, to policzona w projektach liczba linii kodu oraz plików, z uwzględnieniem przestrzeni nazw do której należą. Jako, że interesuje nas głównie nakład pracy dla programisty potrzebny do napisania aplikacji, to w obliczeniach zostały pominięte pliki generowane przez IDE np. designer.cs czy linie będące komentarzami, linią pustą czy „using’iem”. Dodatkowo część wspólna nie uwzględnia WebApi.
Projekt 1
![Projekt 1 tabela Projekt 1 tabela](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt1-tabelka-Software-Development-1.png)
![Wykres kołowy - Linie: Shared 42%, Android 31%, iOS 27% Wykres kołowy - Linie: Shared 42%, Android 31%, iOS 27%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt1-wspoldzielone-linie-Software-Development.png)
![Wykres kołowy - Pliki: Shared 55%, Android 25%, iOS 20% Wykres kołowy - Pliki: Shared 55%, Android 25%, iOS 20%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt1-wspoldzielone-pliki-Software-Development.png)
Xamarin: Native
Typ: Biznes – wiadomości
Cechy: animacje, media społecznościowe, odtwarzanie wideo
Projekt 2
Xamarin: Native
Typ: Rozrywka – quizy, wiadomości
Cechy: animacje, duża interakcja użytkownika, media społecznościowe, powiadomienia
![Projekt 2 tabela Projekt 2 tabela](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt2-tabelka-Software-Development.png)
![Wykres kołowy - Linie: Shared 58%, Android 11%, iOS 21% Wykres kołowy - Linie: Shared 58%, Android 11%, iOS 21%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt2-wspoldzielone-linie-Software-Development.png)
![Wykres kołowy - Pliki: Shared 63%, Android 19%, iOS 18% Wykres kołowy - Pliki: Shared 63%, Android 19%, iOS 18%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt2-wspoldzielone-pliki-Software-Development.png)
Projekt 3
![Projekt 3 tabela Projekt 3 tabela](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt3-tabelka-Software-Development.png)
![Wykres kołowy - Linie: Shared 37%, Android 35%, iOS 25% Wykres kołowy - Linie: Shared 37%, Android 35%, iOS 25%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt3-wspoldzielone-linie-Software-Development.png)
![Wykres kołowy - Pliki: Shared 49%, Android 26%, iOS 25% Wykres kołowy - Pliki: Shared 49%, Android 26%, iOS 25%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt3-wspoldzielone-pliki-Software-Development.png)
Xamarin: Native
Typ: Użytkowa – pogoda
Cechy: animacje, duża interakcja użytkownika, wykorzystanie aparatu, lokalizacja
Projekt 4
![Projekt 4 tabela Projekt 4 tabela](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt4-tabelka-Software-Development.png)
![Wykres kołowy - Linie: Shared 86%, Android 7%, iOS 7% Wykres kołowy - Linie: Shared 86%, Android 7%, iOS 7%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt4-wspoldzielone-linie-Software-Development.png)
![Wykres kołowy - Pliki: Shared 84%, Android 9%, iOS 7% Wykres kołowy - Pliki: Shared 84%, Android 9%, iOS 7%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt4-wspoldzielone-pliki-Software-Development.png)
Xamarin: Forms
Typ: Użytkowa – segregacja śmieci
Cechy: dane tabelaryczne, lokalizacja, mapy
Projekt 5
![Projekt 5 tabela Projekt 5 tabela](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt5-tabelka-Software-Development.png)
![Wykres kołowy - Linie: Shared 77%, Android 11%, iOS 12% Wykres kołowy - Linie: Shared 77%, Android 11%, iOS 12%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt5-wspoldzielone-linie-Software-Development.png)
![Wykres kołowy - Pliki: Shared 74%, Android 15%, iOS 11% Wykres kołowy - Pliki: Shared 74%, Android 15%, iOS 11%](https://sii.pl/blog/wp-content/uploads/2017/12/Xamarin-Projekt5-wspoldzielone-pliki-Software-Development.png)
Xamarin: Forms
Typ: Użytkowa – zarządzanie alarmami
Cechy: prezentacja danych, powiadomienia
Xamarin.Forms
Pierwsze trzy projekty są typu Xamarin.Native, a pozostałe dwa typu Xamarin.Forms. Niebieski kolor na wykresach oznacza dane wspólne dla projektów Android oraz iOS i widać, że wyraźną przewagę pod tym względem mają projekty typu Xamarin.Forms. Microsoft twierdzi, że w tym przypadku wspólny kod może wynosić do 95%. Nam udało się uzyskać ok 75% – 85%, co uważam za dobry wynik.
Xamarin.Native
Jeśli chodzi o projekty Xamarin.Native, „gwarancja” opiewa na ok 70%. Tutaj w porównaniu do Xamarin.Forms sytuacja trochę się komplikuje. Tylko Projekt 2 ma podobne proporcje liczby linii kodu do plików – tak jak projekty 4 i 5. Możemy zauważyć, że w projektach 1 i 3 te proporcje są mniejsze o ok 13%. Wszystkie natomiast projekty 1,2,3 mają co najmniej 50% wspólnych plików. Oceniam, że w tym wypadku uzyskaliśmy ok 40% – 60% części wspólnych.
Warto również zauważyć, że we wszystkich pięciu projektach pozostałe kolory, czyli Android oraz iOS, są sobie praktycznie równe.
Wnioski
Podsumowując, projekty Xamarin.Native, które są lepsze dla aplikacji wymagających animacji czy różnorakiej interakacji użytkownika, bądź API dedykowanego systemowi, posiadają mniej wspólnego kodu, gdyż specyficzne zachowania sytemów trzeba napisać osobno dla każdej z platform Android i iOS. Mimo wszystko więcej niż połowa aplikacji to część wspólna.
Xamarin.Forms świetnie nadaje się do aplikacji, które mają prezentować statyczną zawartość – czyli taką, która się nie animuje, nie rusza itd. Takie zachowania oraz mechanizmy potrzebne do ich realizacji nie są podobne dla Android’a i iOS’a, przez co nie dają się łatwo uwspólnić. Reasumując muszę przyznać, że Xamarin spełnia pokładane w nim nadzieje i pozwala na dużą oszczędność czasu i pieniędzy. Co więcej, nadaje się do praktycznie każdego typu aplikacji. Wystarczy tylko mieć założenia i oczekiwania dobrze dobrane do typu Xamarina, którego się wykorzysta do napisania aplikacji. Biorąc pod uwagę powyższe mogę sobie pogratulować, ponieważ decyzja o wybraniu tej technologi była właściwa.
Zostaw komentarz