Xamarin vs Flutter


Xamarin

Permulaan Xamarin

Xamarin lahir bukan dari Microsoft. Melainkan didirikan oleh pembuat Mono Framework seperti Miguel de Icaza dan Nat Friedman di tahun 2011. Mono sendiri adalah sebuah framework yang memungkinkan developer .Net menjalankan kode C# dan VB.Net di lingkungan Linux.

 Ketika hadir pertama kali, Xamarin adalah platform berbayar. Tetapi dengan integrasi yang mudah dengan Visual Studio dan Android atau iOS emulator, maka banyak developer .Net yang tertarik menggunakannya. Visual Studio adalah default IDE untuk programmer .Net. Sangat powerful, mudah digunakan, dan terutama kecepatan deliver aplikasi beserta troubleshoot dan debugging error yang sangat baik.

Di lingkungan MacOS, Xamarin awalnya mengandalkan MonoDevelop untuk IDE pembuatan aplikasi iOS.
MonoDevelop juga digunakan untuk pembuatan aplikasi .Net di Linux, baik itu aplikasi berbasis Console, GUI, maupun Web.

Xamarin Dibeli Microsoft

Di tahun 2016 sebuah kabar baik bagi komunitas .Net datang. Salah satu yang menarik dalam akuisisi Xamarin ini, Microsoft menjanjikan pengembangan aplikasi Xamarin tidak lagi berbayar,  melainkan gratis. Termasuk integrasi dengan Visual Studio yang lebih baik. Ketika menginstall Visual Studio ada pilihan apakah include dengan Xamarin.

Dari sisi teknologi tentunya dengan nama besar Microsoft maka dapat dipastikan akan menambah kualitas fitur. Dari sisi keuangan juga Xamarin tidak perlu repot mencari modal untuk pengembangan fitur.

Baru belakangan mereka merilis Visual Studio for Mac. Tampilannya hampir mirip dengan kemudahan penggunaan yang sama.

Developing Xamarin 

Di lingkungan Windows, Visual Studio yang sudah terinstal Xamarin akan menambah template Create New Android Application. Visual Studio juga akan mendeteksi lokasi instalasi Android SDK. Jika sudah terkonfigurasi dengan baik maka proses Build akan mengaktifkan emulator Android dan menginstal aplikasi ke dalam emulator tersebut. Jika aplikasi sudah menyala maka proses Debugging dari Visual Studio dapat diikuti jika kita menambahkan Breakpoint. Proses line by line debugging dapat nyaman digunakan seperti kita melakukan debugging aplikasi WinForm maupun ASP.Net.

Di lingkungan MacOS juga menawarkan experience atau pengalaman yang sama nyamannya. Tetapi selain template Create New Android Application, tentunya ada tambahan template Create New iOS.

Hasil akhirnya adalah file .apk untuk Android dan .app untuk iOS.

Publikasi Aplikasi Xamarin

Penggunaan Xamarin biasanya terbatas dalam lingkungan Enterprise. Untuk deploying ke Play Store sepertinya tidak terlalu digemari karena ukuran publish file apk akhir yang besar. Pengalaman saya membuat launcher WebView, di Java hanya berukuran 3 MB, tetapi di Xamarin bisa berukuran dua kalinya, atau 6 MB. Xamarin harus menambahkan runtime Mono agar aplikasi dapat berjalan di Android atau iOS. Belum lagi jika aplikasi membutuhkan library .dll pendukung yang dapat menambah ukuran apk.

Untuk deployment iOS tidak ada tempat lain selain di AppStore. Tentu saja versi update aplikasi terbaru tidak bisa langsung diinstal oleh pengguna karena menunggu review dari Apple.

Poin Utama Developer Mobile Memilih Xamarin

  • Sudah terbiasa menggunakan C# ataupun VB.Net.
  • Sudah terbiasa pula debugging di Visual Studio.
  • Share library antara Android dan iOS. Bahkan dengan backend web API.
  • Dengan teknologi Xamarin.Forms memungkinkan membuat satu project dengan 2 output file .apk Android ataupun .app iOS. Tentu saja ada beberapa fitur spesifik Android maupun Mac yang tidak tercover.
  • Dokumentasi yang baik dan rapi di website resminya. Berbagai pertanyaan mengenai troubleshoot juga banyak ditanyakan developer di StackOverflow dan GitHub.
  • Dukungan existing library yang cukup kaya tersedia di nuget. Tentu saja pengecualian terhadap library yang mempunyai reference ke Windows seperti WinForm.
Walaupun tetap harus mempelajari Android SDK dan padanan tata cara koding di Java, paling tidak investasi mempelajari .Net framework masih dapat digunakan.

Karena Android SDK update atau perubahannya cukup sering, maka bagi developer Mobile yang menginginkan fitur terbaru harus agak bersabar menunggu implementasi Xamarin. Hal ini tidak cukup mengganggu karena Xamarin sendiri terus meng-update menyesuaikan Android SDK. Tentu saja dengan internal testing mereka untuk dapat mem-publish versi yang paling stabil.

Flutter

Flutter merupakan pendatang baru di dunia Mobile Development. Lahir langsung dari Google tapi engine utamanya adalah hasil akuisisi, yaitu Skia 2D Engine. Skia dapat digambarkan sebagai sebuah kanvas yang efektif dalam melakukan renderisasi objek 2D. Saat tulisan ini dirilis pengembangannya masih dalam mode Beta.

Bahasa pemrograman yang digunakan adalah Dart. Bagi programmer Java maupun C# tidak akan ada kesulitan mempelajari karena mirip, dan berbasis OOP. Awalnya Dart punya posisi yang sama dengan GWT, TypeScript maupun Elm yang digunakan untuk pengembangan aplikasi Web, dimana outputnya adalah JavaScript. Kemudian berlanjut ke bahasa server menggunakan NodeJs. Berlanjut lagi ke mobile dengan framework yang lebih unik dan fresh, yaitu Flutter.

Sebagai "pemilik" Android dengan Java sebagai bahasa pemrograman utama, Google telah lebih dulu mempromosikan Kotlin, sebuah bahasa pemrograman OOP,  sebagai alternatif mengembangkan aplikasi Android di lingkungan Android Studio.

Berbeda dari Kotlin, tujuan Google mempromosikan Flutter lebih ke arah kemudahan developer. Satu platform dapat digunakan di Android dan iOS. Mirip seperti Xamarin.Forms. Jadi waktu untuk delivery aplikasi menjadi lebih cepat.

Walaupun menggunakan Dart yang berbasis OOP, namun framework-nya disamakan dengan React, yaitu Javascript Framework yang dikembangkan Facebook. React lebih condong sebagai sebuah View di dalam istilah atau term MVC. Semua berbasis komponen atau Widget. Object creationnya ringan jadi tidak perlu ragu untuk membuat instance Widget baru ke dalam sebuah Widget.

Pertama kali saya mencoba Flutter ketika masih mode Alpha. Menggunakan beberapa tutorial yang sudah banyak tersedia di internet. Salah satunya dari tutplus. IDE-nya bisa menggunakan Jetbrains IDEA Community dan baru ketika versi Beta saya baru tahu Visual Studio Code sudah mendukung Dart+Flutter. Kedua-duanya bagus tapi tentu saja Visual Studio Code akan terasa lebih ringan loading awalnya.

Sekilas mencoba memang untuk prototyping OK. Design tidak kita definisikan di XML melainkan langsung di code (sifatnya relatif, beberapa developer lebih menyukai definisi design di XML).

Ketika runtime atau debugging, kita juga bisa mengganti warna huruf, panjang atau lebar suatu widget, mengganti nilai dari suatu variabel, dan lain-lain. Ketika selesai merubah code atau design, dengan fitur Hot Reload, tidak perlu melakukan kompilasi kode ulang, perubahan secara instan sudah bisa dilihat di emulator.

Sama dengan Xamarin, output file .apk Flutter ini juga membengkak. Karena di dalamnya Flutter juga include runtime atau engine, seperti Skia. Tentu saja selain file image atau gambar yang anda pasang di aplikasi. Pastikan untuk memindah setting Build ke Release-bukan Debug-terlebih dahulu agar ukuran file apk lebih kecil.

Kesimpulannya,

Poin Utama Developer Mobile Memilih Flutter

  • Berasal dari Google. Memang banyak produk yang ditutup oleh Google di tengah jalan, tapi paling tidak kita tahu kualitas bakat dan talenta programmer di Google.
  • Fitur Hot Reload, tidak perlu kompilasi ulang ketika mengganti code saat runtime atau debugging.
  • Sintaks Dart yang mirip dengan C# atau Java.
  • Cukup satu kali koding bisa dideliver ke Android dan iOS.
Flutter saat ini tidak cocok untuk proyek yang kritikal, seperti yang banyak memerlukan akses ke sensor hardware. Ataupun aplikasi yang butuh menyimpan state ketika aplikasi sleep tapi masih belum close. Dan ketika dibuka kembali, seharusnya aplikasi masih menyimpan state ketika ditutup atau sedang beralih ke aplikasi lain. Begitu juga dengan aplikasi yang membutuhkan background service atau task. Seperti aplikasi radio maupun audio player yang ketika ditutup, suaranya masih bisa kita dengarkan. Atau aplikasi yang ketika Android pertama kali dinyalakan maka perlu mengaktifkan background process.

Kecenderungan lazy developer yang diburu deadline proyek kritikal, lebih baik dari awal pengembangan menggunakan  bahasa pemrograman default Android yaitu Java, maupun Swift atau ObjectiveC di iOS. Ketersediaan resource artikel dan troubleshootnya lebih terjamin.

Demikian yang bisa saya bagi, tentu saja jika berbicara tentang teknologi selalu ada yang terbaru, tapi paling tidak dengan sedikit mengikuti perkembangan trend yang ada dapat memperkaya wawasan kita sebagai developer. Semoga bermanfaat. 

Comments