Mekanika Build iOS

Panduan ini mengeksplorasi cara mengatur waktu aplikasi Anda dan cara menggunakan metode yang dapat digunakan untuk build yang lebih cepat untuk semua konfigurasi build.

Mengembangkan aplikasi hebat lebih dari sekadar menulis kode yang berfungsi. Aplikasi yang ditulis dengan baik harus berisi pengoptimalan yang mencapai build yang lebih cepat dengan aplikasi yang lebih kecil dan berjalan lebih cepat. Pengoptimalan ini tidak hanya akan menghasilkan pengalaman yang lebih baik bagi pengguna, tetapi juga untuk Anda atau pengembang apa pun yang mengerjakan proyek. Sangat penting untuk memastikan bahwa saat berhadapan dengan aplikasi Anda, semuanya sering kali ditentukan.

Ingatlah bahwa opsi default aman dan cepat, tetapi tidak optimal untuk setiap situasi. Selain itu, banyak opsi dapat memperlambat atau mempercepat siklus pengembangan tergantung pada masing-masing proyek. Misalnya, pengupasan asli membutuhkan waktu, tetapi jika ukuran yang sangat sedikit diperoleh maka waktu yang dihabiskan untuk stripping tidak akan dipulihkan dengan penyebaran yang lebih cepat. Di sisi lain, stripping asli dapat menyusutkan aplikasi secara signifikan, dalam hal ini akan lebih cepat untuk disebarkan. Ini bervariasi di antara proyek, dan satu-satunya cara untuk mengetahuinya adalah dengan menguji.

Kecepatan build Xamarin juga dapat dipengaruhi oleh berbagai kapasitas dan kemampuan komputer daripada dapat memengaruhi performa: kemampuan prosesor, kecepatan bus, jumlah memori fisik, kecepatan disk, kecepatan jaringan. Batasan performa ini berada di luar cakupan dokumen ini dan merupakan tanggung jawab pengembang.

Aplikasi pengaturan waktu

Untuk mengaktifkan output MSBuild diagnostik dalam Visual Studio untuk Mac:

  1. Klik Preferensi Visual Studio untuk Mac > ...
  2. Di tampilan pohon sebelah kiri, pilih Build Proyek >
  3. Di panel sebelah kanan, atur menu drop-down Verbositas Log ke Diagnostik: Setting the Log verbosity
  4. Klik OK
  5. Mulai ulang Visual Studio untuk Mac
  6. Bersihkan dan bangun kembali paket Anda
  7. Lihat output diagnostik dalam Errors Pad (Lihat > Kesalahan Pads > ) dengan mengklik tombol Build Output

Waktu mtouch

Untuk menampilkan informasi khusus untuk proses build mtouch, teruskan --time --time ke argumen mtouch di Opsi Proyek Anda. Hasilnya ditemukan di Output Build, dengan mencari MTouch tugas:

Setup: 36 ms
Resolve References: 982 ms
Extracted native link info: 987 ms
...
Total time: 1554 ms

Koneksi dari Visual Studio dengan Build Host

Alat Xamarin secara teknis berfungsi di Mac apa pun yang dapat menjalankan OS X 10.10 Yosemite atau yang lebih baru. Namun, pengalaman pengembang dan waktu build dapat dihambat oleh performa Mac.

Dalam status terputus, Visual Studio di Windows hanya melakukan fase kompilasi C# dan tidak mencoba melakukan penautan atau kompilasi AOT, mengemas aplikasi ke dalam bundel .app , atau menandatangani bundel aplikasi. (Fase kompilasi C# jarang menjadi hambatan performa.) Cobalah untuk menentukan di mana dalam alur build melambat dengan membangun langsung pada host build Mac di Visual Studio untuk Mac.

Selain itu, salah satu tempat yang lebih umum untuk lamban adalah koneksi jaringan antara komputer Windows dan host build Mac. Ini bisa disebabkan oleh penghambat fisik pada jaringan, menggunakan koneksi nirkabel, atau harus melakukan perjalanan melalui mesin jenuh (seperti layanan Mac-in-the-cloud).

Trik Simulator

Saat mengembangkan aplikasi seluler, penting untuk menyebarkan kode dengan cepat. Karena berbagai alasan termasuk kecepatan dan kurangnya persyaratan provisi perangkat, pengembang sering memilih untuk menyebarkan ke simulator atau emulator yang telah diinstal sebelumnya. Untuk produsen alat pengembang, keputusan untuk menyediakan simulator atau emulator turun ke trade-off antara kecepatan dan kompatibilitas.

Apple menyediakan simulator untuk pengembangan iOS, mempromosikan kecepatan dibandingkan kompatibilitas dengan membuat lingkungan yang kurang ketat untuk menjalankan kode. Lingkungan yang kurang ketat ini memungkinkan Xamarin menggunakan kompilator Just In Time (JIT) untuk simulator (dibandingkan dengan AOT pada perangkat), yang berarti bahwa build dikompilasi ke kode asli saat runtime. Karena Mac jauh lebih cepat daripada perangkat, hal ini memungkinkan performa yang lebih baik.

Simulator menggunakan peluncur aplikasi bersama, memungkinkan peluncur digunakan kembali, dibandingkan dengan yang dibangun setiap kali, seperti yang diperlukan pada perangkat.

Saat mempertimbangkan informasi di atas, daftar di bawah ini memberikan beberapa informasi tentang langkah-langkah yang harus diambil saat membangun dan menyebarkan aplikasi Anda di simulator untuk memberikan performa terbaik.

Tips

  • Untuk Build:
    • Batalkan pilih opsi Optimalkan gambar PNG di Opsi Proyek. Pengoptimalan ini tidak diperlukan untuk build pada simulator.
    • Atur linker ke Jangan Tautkan. Menonaktifkan linker lebih cepat karena mengeksekusi membutuhkan waktu yang signifikan.
    • Menonaktifkan peluncur aplikasi bersama dengan menggunakan --nofastsim bendera menyebabkan build simulator jauh lebih lambat. Hapus bendera ini ketika tidak lagi diperlukan.
    • Menggunakan pustaka asli lebih lambat karena executable utama simlauncher bersama tidak dapat digunakan kembali dalam kasus seperti itu dan executable khusus aplikasi harus dikompilasi untuk setiap build.
  • Untuk Penyebaran
    • Selalu jaga agar simulator tetap berjalan jika memungkinkan. Dibutuhkan waktu hingga 12 detik untuk memulai simulator dengan dingin.
  • Tips Tambahan
    • Lebih suka Bangun dibanding Bangun Ulang, karena Bangun ulang pembersihan sebelum membangun. Pembersihan dapat memakan waktu lama karena menghapus referensi yang dapat digunakan.
    • Manfaatkan fakta bahwa simulator tidak memberlakukan kotak pasir. Memiliki sumber daya besar seperti video atau aset lain yang disertakan dalam proyek Anda dapat membuat operasi penyalinan file yang mahal setiap kali aplikasi diluncurkan di simulator. Hindari operasi mahal ini dengan menempatkan file-file ini di direktori beranda, dan referensikan di aplikasi Anda dengan jalur file lengkap.
    • Jika ragu, gunakan --time --time bendera untuk mengukur perubahan Anda

Cuplikan layar di bawah ini menggambarkan cara mengatur opsi ini untuk simulator di opsi iOS Anda:

Screenshot shows Project Options, including Linker behavior, Additional mtouch arguments, and Optimize P N G images.

Trik Perangkat

Menyebarkan ke perangkat mirip dengan menyebarkan ke simulator, karena simulator adalah subset kecil dari build yang digunakan untuk perangkat iOS. Membangun untuk perangkat membutuhkan lebih banyak langkah, tetapi memiliki keuntungan memberikan peluang tambahan untuk mengoptimalkan aplikasi Anda.

Konfigurasi Build

Ada sejumlah konfigurasi build yang disediakan saat menyebarkan aplikasi iOS. Penting untuk memiliki pemahaman yang baik tentang setiap konfigurasi, untuk mengetahui kapan dan mengapa Anda harus mengoptimalkan.

  • Debug
    • Ini adalah konfigurasi utama yang harus digunakan saat aplikasi sedang dikembangkan, dan oleh karena itu, harus secepat mungkin.
  • Rilis
    • Build rilis adalah build yang dikirimkan kepada pengguna Anda dan fokus pada performa adalah yang terpenting. Saat menggunakan konfigurasi Rilis, Anda mungkin ingin menggunakan LLVM yang mengoptimalkan pengkompilasi dan mengoptimalkan file PNG.

Penting juga untuk memahami hubungan antara membangun dan menyebarkan. Waktu penyebaran adalah fungsi dari ukuran aplikasi. Aplikasi yang lebih besar membutuhkan waktu lebih lama untuk disebarkan. Dengan meminimalkan ukuran aplikasi, Anda dapat mengurangi waktu penyebaran.

Meminimalkan ukuran aplikasi juga dapat mengurangi waktu build. Ini karena menghapus kode dari aplikasi membutuhkan waktu lebih sedikit daripada mengkompilasi kode yang tidak akan digunakan secara asli. File objek yang lebih kecil berarti penautan yang lebih cepat, yang membuat executable yang lebih kecil dengan simbol yang lebih sedikit untuk dihasilkan. Oleh karena itu, hemat ruang, memiliki payoff ganda, itulah sebabnya Link SDK adalah default untuk semua build perangkat.

Catatan

Opsi Tautkan SDK mungkin muncul sebagai Link Framework SDK Saja atau rakitan Link SDK saja, tergantung pada IDE yang sedang digunakan.

Tips

  • Membangun:
    • Membangun arsitektur tunggal (misalnya ARM64) lebih cepat daripada biner FAT (misalnya ARMv7 + ARM64)
    • Hindari mengoptimalkan file PNG saat penelusuran kesalahan
    • Pertimbangkan Untuk Menautkan semua rakitan. Mengoptimalkan setiap perakitan
    • Menonaktifkan pembuatan simbol debug dengan menggunakan --dsym=false. Namun, Anda harus menyadari bahwa menonaktifkan ini akan berarti bahwa laporan crash hanya dapat dilambangkan pada mesin yang membangun aplikasi, dan hanya jika aplikasi tidak dilucuti.

Beberapa hal yang harus dihindari adalah:

  • Biner Gemuk (debug)
  • Menonaktifkan linker --nolink
  • Menonaktifkan stripping
    • Simbol --nosymbolstrip
    • IL (rilis) --nostrip.

Tips tambahan

  • Seperti pada simulator, lebih suka Build daripada Membangun Kembali
    • Rakitan AOT (file objek) di-cache
  • Build debug membutuhkan waktu lebih lama karena simbol, menjalankan dsymutil dan karena akhirnya menjadi lebih besar, waktu tambahan untuk diunggah ke perangkat.
  • Build rilis akan, secara default, melakukan strip IL dari rakitan. Itu hanya membutuhkan sedikit waktu dan kemungkinan diperoleh kembali saat menyebarkan .app yang lebih kecil ke perangkat.
  • Hindari menyebarkan file statis besar pada setiap build (debug)
    • Menggunakan UIFileSharingEnabled (info.plist)
      • Aset dapat diunggah sekali
  • Jika ragu, gunakan --time --time bendera untuk mengukur perubahan Anda

Cuplikan layar di bawah ini menggambarkan cara mengatur opsi ini untuk simulator di opsi iOS Anda:

Screenshot shows Project Options, including Linker behavior, Supported architectures, and other settings.

Menggunakan Linker

Saat membangun aplikasi Anda, mtouch menggunakan linker untuk kode terkelola, yang menghapus kode yang tidak digunakan aplikasi. Secara teori, ini menyediakan build yang lebih kecil, dan karenanya lebih cepat. Untuk informasi selengkapnya tentang linker, lihat panduan Menautkan di iOS .

Pertimbangkan opsi berikut saat menggunakan Linker:

  • Memilih Jangan Tautkan untuk build Perangkat membutuhkan waktu yang lebih lama, dan juga menghasilkan aplikasi yang lebih besar.
    • Apple akan menolak app jika lebih besar dari batas ukuran. Tergantung pada MinimumOSVersion, ini bisa sesedikcil 60MB.
    • Executable asli sedang disertakan.
    • Menggunakan Tautan Jangan lebih cepat untuk build simulator karena kompilasi JIT digunakan (dibandingkan dengan AOT pada perangkat).
  • Link SDK adalah opsi default.
  • Tautan Semua mungkin tidak aman untuk digunakan, terutama jika Anda menggunakan kode yang bukan milik Anda sendiri seperti NuGets atau Komponen. Jika Anda memilih untuk tidak menautkan rakitan semua kode dari layanan ini disertakan dengan aplikasi Anda, berpotensi membuat aplikasi yang lebih besar.
    • Namun, jika Anda memilih Tautkan Semua aplikasi dapat mengalami crash, terutama jika komponen eksternal digunakan. Hal ini disebabkan oleh beberapa komponen yang menggunakan Refleksi pada jenis tertentu.
    • Analisis statis dan refleksi tidak bekerja sama.

Alat-alat dapat diinstruksikan untuk menyimpan hal-hal di dalam aplikasi dengan menggunakan [Preserve] atribut .

Jika Anda tidak memiliki akses ke kode sumber, atau dibuat oleh alat dan Anda tidak ingin mengubahnya, itu masih dapat ditautkan dengan membuat file XML yang menjelaskan semua jenis dan anggota yang perlu dipertahankan. Anda kemudian dapat menambahkan bendera --xml={file.name}.xml ke opsi proyek Anda, yang memproses kode persis seolah-olah Anda menggunakan Atribut.

Sebagian Menautkan Aplikasi

Dimungkinkan juga untuk menautkan sebagian aplikasi, untuk membantu mengoptimalkan waktu build aplikasi Anda:

  • Gunakan Link All dan lewati beberapa rakitan

    • Beberapa pengoptimalan ukuran aplikasi hilang.
    • Tidak diperlukan akses ke kode sumber.
    • Misalnya --linkall --linkskip=fieldserviceiOS .
  • Gunakan Link SDK opsi dan gunakan [LinkerSafe] atribut pada rakitan yang Anda butuhkan

    • Akses ke kode sumber yang diperlukan.
    • Memberi tahu sistem bahwa perakitan aman untuk ditautkan, dan diproses seolah-olah itu adalah Xamarin SDK.

Objective-C Pengikatan-Pengikatan

  • [Assembly: LinkerSafe] Menggunakan atribut pada pengikatan Anda dapat menghemat waktu dan ukuran.

  • SmartLink

    • Selesai di sisi Asli
    • [LinkWith (SmartLink=true)] Gunakan atribut
    • Ini membantu linker asli untuk menghilangkan kode asli dari pustaka yang Anda tautkan.
    • Perhatikan bahwa pencarian simbol dinamis tidak akan berfungsi dengan ini.

Ringkasan

Panduan ini mengeksplorasi cara mengatur waktu aplikasi dan opsi iOS untuk mempertimbangkan hal tersebut tergantung pada konfigurasi dan opsi build proyek.