Build Configuration untuk Xamarin
Ngeliat gambar di atas, kita pasti ketawa sendiri kan? Hahaha… Saya juga. Tiap hari kita utak-atik code, ingin melihat perubahannya, kita compile dulu, 5 menit kemudian baru kita bisa lihat perubahannya. Ini tentu menggangu workflow kita. Ketika kita sedang in the zone tiba-tiba harus nunggu lama untuk melihat apakah perubahannya sesuai dengan yang kita harapkan atau tidak.
Kebetulan kemarin saya nemu video yang seru membahas tentang implikasi build setting di Xamarin. Video ini sudah lama sebenarnya karena ini ada pada acara Evolve 2016 kemarin, tapi tetap relevan dengan sekarang. Berikut videonya
TL;DR:
- Best debug config for deployment times — Android
- No linking
- Shared Runtime
- Fast Deployment
- Enable developer instrumentation
Perlu dicatat di sini bahwa deploy di emulator lebih cepat daripada melakukan deploy di device
2. Best debug config for deployment times — iOS
a. Simulator :
- No linking
- Incremental Builds
- Optimize pngs
b. Device :
- Linking setting ??? (Karena iOS perlu AOT Compilation ketika akan dibuild di device, maka linking setting bisa berubah-ubah. Ini perlu eksperimen sendiri, sesuai dengan code base kita mana yang lebih cepat)
- Incremental Builds
- Optimize Pngs
- Device spesific builds
Perlu dicatat juga di sini deploy di simulator akan lebih cepat daripada di device dan juga melakukan build langsung di macOS menggunakan Xamarin Studio akan lebih cepat daripada melakukan build di Windows menggunakan Visual Studio yang terkoneksi ke macOS
3. Best release config — Android
- Link SDK and User assemblies jika memungkinkan ( ini harus hati-hati. File size bisa lebih kecil namun kadang akan membuat aplikasi crash karena linker terkadang akan menghapus code yang akan kita pertahankan. Referensi di sini)
- Embed assemblies in native code (hanya untuk yang memiliki MSDN Enterprises)
- Enable proguard (Referensi di sini)
Opsional :
- Enable multidex (jika kode sudah memiliki > 65536 method. Referensi di sini)
- Generate one package (.apk) per selected ABI
- Internationalization
- Java heap size
- Uncompressed resource extensions
Yang wajib dimatikan :
- Use shared mono runtime
- Fast assembly deployment
- Enable developer instrumentation
4. Best release config — iOS
- Link SDK and User assemblies jika memungkinkan ( ini harus hati-hati. File size bisa lebih kecil namun kadang akan membuat aplikasi crash karena linker terkadang akan menghapus code yang akan kita pertahankan. Referensi di sini)
- LLVM Optimizing compiler
- Strip native debug symbols
- Optimize png images for ios
- Suppported architecture (Saya biasanya menggunakan ARMv7+ARM64 untuk targeting 4s ke atas. Referensi di sini)
Opsional :
- Thumb 2 instructions set
- Perform 32 bit float operations as 64 bit (Centang jika menemukan bug dalam penghitungan presisi aritmatika)
- Internationalization code sets
Yang wajib dimatikan :
- Enable incremental builds
- Enable device specific builds
- Enable debugging
- Enable profiling