
Dengan tugas mengembangkan aplikasi untuk konferensi internal kami yang akan datang sebagai bagian dari Grup OLX, tim saya memikirkan cara mengurangi waktu yang diperlukan untuk membuat aplikasi untuk iOS dan Android, karena kami tidak ada hubungannya tanpa itu. Hal pertama yang terpikir oleh saya adalah menggunakan Kotlin, sebagai Itu dapat dikompilasi di platform lain. Spoiler: tidak semuanya berjalan sesuai rencana, tapi kami melakukan semuanya tepat waktu, belajar banyak di sepanjang jalan!
Jadi, ini adalah kisah tentang bagaimana kami membuat aplikasi Konferensi Produk & Teknologi Grup OLX dalam waktu singkat.
Baru-baru ini, perusahaan seperti Google dan Facebook telah melakukan upaya besar dalam pengembangan pengembangan lintas platform. Flutter dan Kotlin / Asli adalah hasil dari upaya ini.
Apa itu flutter?
Flutter, dikembangkan oleh Google, diumumkan kembali pada tahun 2017. Sebagai bahasa pengembangan, ia menggunakan Dart. Flutter mendukung kompilasi kode pada Android dan iOS menggunakan basis kode tunggal yang ditulis dalam Dart. Flutter mengkompilasi ke dalam kode asli, dan tidak menggunakan komponen tampilan web dalam aplikasi. Tetapi ia menggunakan komponen antarmuka penggunanya sendiri alih-alih yang spesifik platform seperti UIView di iOS atau Fragmen dan ViewGroups di Android. Flutter juga mendukung Material Design dan Material Theming dalam komponen antarmuka penggunanya.
Kami tidak memiliki pengalaman pengembangan di Dart, jadi kami tidak yakin bahwa kami akan memiliki cukup waktu untuk belajar bahasa baru (bagaimanapun, kami memiliki tugas prioritas lainnya). Kami benar-benar tidak mulai menggunakan Flutter sampai kami menyadari bahwa kami benar-benar memiliki sedikit waktu. Oleh karena itu, awalnya kami mulai menggunakan Kotlin / Asli dan mengembangkan beberapa data tiruan dan logika untuk mereka.
Berikut adalah struktur folder di Kotlin / Native yang kami punya:

Perhatikan folder "umum", yang berisi semua kode umum yang ditulis dalam Kotlin. Dengan demikian, proyek-proyek di Android dan iOS menggunakan kode dari folder ini.
Apa itu Kotlin / Asli?
Kotlin / Asli dikembangkan oleh JetBrains, perusahaan yang sama yang menciptakan Kotlin. Jika Anda belum pernah mendengar tentang Kotlin, Anda mungkin baru saja tidak mengakses Internet. Secara umum, ini adalah pengganti yang disederhanakan untuk Java, yang juga mendukung kompatibilitas dengan itu. Kotlin / Asli memungkinkan Anda untuk menulis kode di Kotlin dan mengompilasinya di berbagai platform yang awalnya tidak mendukung Kotlin, misalnya, iOS.
Desain
Kami meminta desainer kami untuk melemparkan beberapa tata letak untuk aplikasi, dan dia dengan cepat menghasilkan desain yang bagus dengan Material Theming. Sketch memiliki plugin untuk membuat sketsa Material Theming, yang menyelamatkan kita banyak waktu dan usaha.
Berikut ini adalah gambaran singkat dari desain sketsa yang dibuat oleh desainer kami:

Material Theming memungkinkan Anda membuat tata letak desain dengan cepat dan mendukung iOS dan Android.
Awalnya, kami ingin mengimplementasikan antarmuka pengguna secara terpisah untuk Android dan iOS. Terlepas dari kenyataan bahwa kedua platform mendukung Material Theming, kami masih harus menulis antarmuka untuk keduanya. Dan kami berpikir bahwa jika kami menggunakan Flutter untuk antarmuka pengguna, maka kami akan memiliki satu basis kode dan itu akan terlepas dari logika aplikasi, dan karenanya kami dapat terus menggunakan logika Kotlin terlepas dari ini.
Kami mengajarkan Kotlin / Asli dan Flutter untuk bekerja bersama
Karena Sebelum itu, kami tidak bekerja dengan Flutter, kami harus memastikan bahwa itu akan bekerja dengan kode yang sudah ada yang sudah kami miliki. Ngomong-ngomong, tampaknya sebelum ini tidak ada yang mencoba menggunakan Flutter dan Kotlin / Asli bersama-sama. Kami berencana membangun arsitektur yang disajikan di bawah ini. Arsitektur ini mengurangi jumlah kode khusus untuk setiap platform, dan juga mengurangi jumlah kode pada Dart, karena kita dapat mengisolasi sebagian besar logika menggunakan Kotlin.

Kami dapat mengurangi jumlah kode tertentu menggunakan Kotlin dan Dart. Karena Karena kami lebih akrab dengan Kotlin, kami menulis sebagian besar kode umum di atasnya, dan bukan di Dart.

Keterbatasan
Kedua teknologi ini memiliki keterbatasan tertentu yang membuat penggunaannya tidak sesederhana mungkin.
Batas 1: Kotlin / Asli hanya mendukung kelas Kotlin untuk kode umum. Misalnya, jika Anda ingin menggunakan java.util.Date, maka Anda tidak akan memiliki kesempatan seperti itu, karena membutuhkan JVM. Salah satu cara untuk mengatasi masalah ini adalah dengan mengimplementasikan metode ini dalam kode platform (Android dan iOS) dan menyebutnya dari Kotlin / Native.
Batas 2: Kotlin menggunakan objek Companion untuk metode statis yang berubah menjadi objek yang sama sekali baru di iOS. Salah satu cara untuk mengatasi ini adalah membuat metode statis sebagai metode instan atau menjadikan metode kelas fungsi global.
Batas 3: Kotlin / Asli hanya mendukung kompilasi untuk arm64 di iOS. Perangkat terbaru berfungsi dengan arsitektur prosesor ini, tetapi yang lama masih menggunakan armv7. Untuk menghindari masalah dengan arsitektur, cukup buka "Build Settings" dan hapus semua arsitektur kecuali arm64.
Ada juga beberapa batasan pada interaksi antara kode Kotlin, kode Flutter, dan kode platform. Flutter dapat berinteraksi dengan kode platform menggunakan saluran, melewati di sana nama metode dan satu set parameter. Parameter terbatas pada kelas asli seperti peta, daftar, string, int, dll. Dengan semua interaksi ini, objek khusus diserialisasi. Namun, baik Flutter dan Kotlin / Native memiliki dukungan terbatas untuk serialisasi, jadi untuk sekarang kami menggunakan kelas asli secara langsung.
Ringkasan
Hasil utama dari pengalaman kami:
- Flutter sangat bagus untuk pembuatan prototipe cepat;
- Flutter dan Kotlin / Native masih dalam versi beta, tetapi sudah dapat digunakan, meskipun dengan beberapa keterbatasan;
- Kotlin / Native menyelesaikan dengan sempurna masalah pengurangan jumlah kode spesifik platform;
- Penting untuk menulis beberapa layer yang akan bertanggung jawab untuk transfer objek dan serialisasi mereka.
Pengembangan aplikasi memakan waktu sekitar satu minggu perencanaan dan satu setengah minggu pengembangan. Kami menghabiskan sekitar satu jam sehari dengan empat pengembang dan desainer, sambil melakukan pekerjaan biasa kami.
Sangat menyenangkan mengembangkan aplikasi ini menggunakan Flutter dan Kotlin, dan saya harap Anda juga mencoba kedua teknologi ini.

Anda dapat menemukan lebih banyak materi Kotlin / Asli di dokumentasi resmi:
Dan baca / lihat tentang Flutter di sini: