Logo Universitas Teknokrat Indonesia

Kategori: ISO
Gambar untuk

Optimalisasi Performa dengan iOS SDK: 5 Trik Menggunakan Instruments dan XCTest yang Jarang Diketahui

Performa adalah fitur. Pengguna mungkin tidak akan memuji aplikasi Anda karena berjalan mulus, tetapi mereka pasti akan mengeluh, memberikan ulasan buruk, atau bahkan menghapus aplikasi jika terasa lambat, boros baterai, atau sering macet (crash). Di ekosistem Apple yang sangat kompetitif, memberikan pengalaman pengguna yang responsif adalah sebuah keharusan, bukan pilihan.

Untungnya, Apple menyediakan dua senjata ampuh dalam iOS SDK: Instruments dan XCTest. Sebagian besar developer mungkin pernah menggunakan Instruments untuk memeriksa lonjakan CPU atau XCTest untuk unit testing. Namun, di balik penggunaan standar tersebut, tersimpan fungsionalitas canggih yang sering terlewatkan. Lupakan cara-cara biasa; artikel ini akan membedah lima trik spesifik yang jarang diketahui untuk membawa analisis performa aplikasi Anda ke level berikutnya.

Baca juga : 1. Untuk Developer Pemula hingga Menengah (Judul Edukatif)


1. Memburu 'Abandoned Memory' dengan Visual Memory Debugger

Semua developer tahu bahaya memory leak—objek yang tidak pernah dirilis dan terus menumpuk. Instruments punya templat "Leaks" untuk ini. Tapi ada masalah yang lebih licik: abandoned memory. Ini adalah memori yang secara teknis tidak bocor (tidak ada strong reference cycle), tetapi sudah tidak akan pernah digunakan lagi oleh aplikasi. Contohnya, sebuah view controller yang sudah di-dismiss tapi masih tersimpan dalam sebuah cache global yang tidak pernah dibersihkan.

Cara konvensional melacaknya bisa sangat sulit. Di sinilah triknya: manfaatkan Visual Memory Debugger Xcode yang terintegrasi dengan Instruments.

Caranya:

  1. Jalankan aplikasi Anda dari Xcode dan buka Debug Memory Graph.
  2. Di panel kiri bawah, Anda akan melihat tumpukan alokasi memori. Alih-alih hanya melihatnya, fokuslah pada alur kerja.
  3. Lakukan sebuah aksi di aplikasi (misalnya, buka halaman detail lalu kembali).
  4. Ambil snapshot memori kedua dengan menekan tombol yang sama.
  5. Xcode sekarang memungkinkan Anda membandingkan kedua snapshot tersebut. Namun, trik utamanya adalah mencari objek-objek (terutama UIViewController atau UIView) dari alur kerja tadi yang seharusnya sudah hilang tapi ternyata masih ada. Objek-objek ini, yang sering ditandai dengan warna ungu di grafik, adalah kandidat utama abandoned memory. Anda bisa mengklik objek tersebut dan melihat siapa yang masih menahannya di memori, mengungkap referensi yang tidak perlu.

Metode ini jauh lebih visual dan intuitif daripada sekadar melihat daftar alokasi di Instruments, memungkinkan Anda menemukan "sampah" memori yang lolos dari detektor leak standar.


2. Mengungkap Biang Keladi 'Jank' dengan Core Animation FPS

Aplikasi yang terasa patah-patah (janky atau stuttering) saat di-scroll adalah pembunuh pengalaman pengguna. Targetnya adalah menjaga frame rate di angka 60 FPS (frames per second). Banyak developer menggunakan instrumen "Time Profiler" untuk melihat fungsi mana yang memakan waktu CPU, tapi seringkali masalahnya bukan di CPU, melainkan di GPU (Graphics Processing Unit).

Di sinilah instrumen Core Animation menjadi pahlawan. Instrumen ini tidak hanya menunjukkan FPS, tetapi juga bisa memvisualisasikan apa yang membuat GPU bekerja terlalu keras.

Caranya:

  1. Jalankan aplikasi Anda melalui Instruments dengan templat Core Animation.
  2. Saat aplikasi berjalan, lakukan aksi yang terasa patah-patah, misalnya scrolling UITableView yang kompleks.
  3. Perhatikan grafik Core Animation Frames Per Second. Jika sering turun di bawah 60, ada masalah.
  4. Sekarang, aktifkan fitur diagnostik di panel "Debug Options" di Instruments. Dua yang paling berguna adalah:
    • Color Blended Layers: Opsi ini akan menandai area layar yang transparan dengan warna merah. Blending beberapa layer transparan adalah operasi yang sangat memberatkan GPU. Tujuannya adalah membuat layar sehijau mungkin. Jika Anda melihat banyak warna merah, pertimbangkan untuk membuat gambar atau view menjadi opaque.
    • Color Off-Screen Rendered: Opsi ini menandai area dengan warna kuning. Off-screen rendering terjadi ketika iOS harus menggambar sesuatu di luar layar terlebih dahulu sebelum menampilkannya di layar utama. Ini sering disebabkan oleh efek seperti bayangan (shadow), corner radius yang kompleks, atau masking. Menghindarinya akan secara dramatis meningkatkan performa scrolling.

Dengan visualisasi ini, Anda tidak lagi menebak-nebak. Anda bisa melihat secara langsung pada komponen UI mana yang menjadi biang keladi dan memperbaikinya.


3. Membedah Waktu Startup Aplikasi Hingga ke Milidetik

Kesan pertama sangatlah penting. Jika aplikasi Anda butuh waktu terlalu lama untuk tampil, pengguna bisa kehilangan minat sebelum sempat menggunakannya. Mengoptimalkan waktu startup (launch time) adalah krusial. Instrumen App Launch adalah alat yang tepat, tetapi banyak yang hanya melihat total waktu tanpa memahami detailnya.

Triknya adalah membedah proses peluncuran menjadi dua fase: pre-main dan post-main, lalu mengidentifikasi biang keladinya.

Caranya:

  1. Profile aplikasi Anda menggunakan templat App Launch di Instruments.
  2. Setelah data terekam, lihat di bagian "Static Initializer" dan "Dynamic Link Editor". Inilah fase pre-main—waktu yang dihabiskan sebelum kode aplikasi Anda sendiri di main() dieksekusi.
    • Penyebab lambat: Terlalu banyak dependency (framework eksternal), atau penggunaan +load() di kelas Objective-C yang melakukan pekerjaan berat. Triknya di sini adalah meninjau ulang dependency Anda dan sebisa mungkin memindahkan logika dari +load() ke +initialize(), yang dieksekusi secara lazy.
  3. Selanjutnya, analisis fase post-main, yang dimulai dari eksekusi application(_:didFinishLaunchingWithOptions:).
    • Penyebab lambat: Melakukan pekerjaan sinkron yang berat di main thread, seperti setup database yang kompleks, memuat data dari disk secara intensif, atau menginisialisasi SDK pihak ketiga yang memblokir.
    • Triknya adalah menunda semua pekerjaan yang tidak mutlak diperlukan untuk menampilkan UI pertama. Pindahkan ke background thread atau lakukan secara lazy saat benar-benar dibutuhkan. Instrumen App Launch akan menunjukkan dengan jelas fungsi mana di dalam didFinishLaunchingWithOptions yang memakan waktu paling banyak.

Dengan membedah kedua fase ini, Anda dapat mengidentifikasi bottleneck dengan presisi setingkat milidetik.


4. Mengautomasi Uji Performa dengan measureBlock di XCTest

Bagaimana Anda memastikan bahwa perubahan kode yang baru tidak membuat performa aplikasi menurun (regression)? Melakukan profiling manual setiap saat tentu tidak efisien. Di sinilah XCTest menawarkan permata tersembunyi: pengujian performa otomatis.

Banyak developer menggunakan XCTest hanya untuk menguji logika (Unit Test) atau alur UI (UI Test). Triknya adalah menggunakan self.measure untuk membuat performance test case.

Caranya:

  1. Buat sebuah test case baru di dalam test target Anda.
  2. Di dalam fungsi tes, panggil self.measure { ... }.
  3. Letakkan kode yang ingin Anda ukur performanya di dalam closure tersebut. Contohnya, sebuah algoritma pengurutan data, proses parsing JSON, atau rendering sebuah view.Swiftfunc testSortingPerformance() { let largeArray = (1...10000).shuffled() self.measure { // Kode yang performanya diukur diletakkan di sini _ = largeArray.sorted() } }
  4. Jalankan tes ini untuk pertama kali. XCTest akan menjalankan kode di dalam measure sebanyak 10 kali untuk mendapatkan rata-rata waktu eksekusi yang stabil.
  5. Setelah selesai, klik ikon abu-abu di samping fungsi tes dan pilih Set Baseline. Ini akan menyimpan hasil pengukuran saat ini sebagai standar performa.
  6. Di masa depan, setiap kali tes ini dijalankan (misalnya dalam proses CI/CD), XCTest akan membandingkan hasil baru dengan baseline. Jika performanya menurun secara signifikan (misalnya lebih dari 10% lebih lambat), tes akan gagal!

Ini adalah cara proaktif untuk menjaga performa aplikasi. Anda secara otomatis akan diberi tahu jika ada commit yang merusak kecepatan aplikasi, jauh sebelum pengguna merasakannya.


5. Sinergi XCTest & Instruments: Merekam Profil Performa Skenario Spesifik

Terkadang, masalah performa hanya muncul dalam skenario pengguna yang sangat spesifik, misalnya saat menambahkan 10 barang ke keranjang belanja lalu melakukan checkout. Melakukan profiling manual untuk skenario seperti ini bisa merepotkan dan tidak konsisten.

Trik pamungkasnya adalah menggabungkan kekuatan XCTest UI Test dengan Instruments. Anda bisa membuat UI Test untuk mengautomasi skenario kompleks, lalu meminta Instruments untuk merekam profil performa selama tes tersebut berjalan.

Baca juga : UTI Gelar PKM Internasional Berkolaborasi Dengan International Islamic University Malaysia

Caranya:

  1. Tulis sebuah UI Test yang mereplikasi alur kerja pengguna yang ingin Anda analisis. Gunakan UI Recording untuk mempercepat prosesnya. Pastikan tes berjalan dengan andal.
  2. Buka Test Navigator di Xcode (⌘6).
  3. Temukan fungsi UI Test yang baru Anda buat.
  4. Alih-alih mengklik tombol "play" untuk menjalankannya, klik kanan pada fungsi tes tersebut.
  5. Dari menu konteks yang muncul, pilih Profile "[nama tes Anda]".
  6. Xcode akan membangun aplikasi, meluncurkan Instruments, dan secara otomatis menjalankan UI Test Anda. Sementara itu, Instruments akan merekam semua data performa (CPU, memori, animasi, dll.) dari awal hingga akhir tes.

Dengan metode ini, Anda mendapatkan rekaman performa yang sangat fokus, bersih, dan dapat diulang untuk skenario yang paling penting bagi bisnis Anda, memungkinkan analisis yang jauh lebih akurat dan efisien.

Penulis : aqilah az-zahra