Menautkan dependensi Firebase secara statis atau dinamis

Diawali dengan CocoaPods 1.9.0 dan Firebase 7, Anda dapat memilih apakah dependensi Firebase dibuat sebagai framework statis atau dinamis. Sebaiknya Anda menggunakan framework statis, kecuali Anda memerlukan perilaku library dinamis tertentu.

Perlu diperhatikan bahwa library yang dikembangkan di luar GitHub hanya dapat ditautkan secara statis bahkan dengan CocoaPods versi 1.9.0 dan yang lebih baru. Saat ini, daftar library ini termasuk AdMob, Analytics, Firebase ML, dan Performance Monitoring. Semua saluran distribusi lainnya, termasuk file zip, Swift Package Manager, dan Carthage hanya menyediakan library yang ditautkan secara statis.

Dokumen ini mengadopsi pengetahuan yang praktis tentang penautan dinamis dan statis di platform Apple. Jika tidak terbiasa dengan konsep ini, baca dokumentasi berikut:

Karena dokumen ini berkaitan dengan jenis penautan library dan bukan pemuatan paket resource yang tidak dapat dieksekusi, istilah library dan framework digunakan secara bergantian.

Penautan statis

Library yang terhubung secara statis digabungkan ke dalam aplikasi Anda yang dapat dieksekusi pada waktu build. Akibatnya, file objek dalam library statis akan ada di aplikasi Anda saat diluncurkan dan tidak perlu diselesaikan pada saat peluncuran aplikasi oleh dynamic linker. Dengan demikian, aplikasi yang menggunakan penautan statis akan diluncurkan lebih cepat. Hal ini menyebabkan biner/aplikasi yang lebih besar dapat dieksekusi, meskipun perlu diperhatikan bahwa ukuran yang dapat dieksekusi yang lebih besar akan diimbangi dengan kurangnya library dinamis yang dipaketkan.

Anda dapat memaksakan penautan statis dependensi Firebase dengan menentukan secara eksplisit penautan di Podfile Anda:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

Penautan dinamis

Library yang tertaut secara dinamis disimpan di app bundle secara terpisah dari aplikasi utama yang dapat dieksekusi. Library tersebut harus dimuat pada waktu peluncuran aplikasi oleh dynamic linker. Semua framework Apple ditautkan secara dinamis untuk mengaktifkan berbagi kode antar proses. Demikian pula, Anda dapat menggunakan framework dinamis untuk berbagi kode antara target aplikasi dan ekstensi. Anda tidak dapat berbagi framework dinamis di antara aplikasi terpisah, meskipun keduanya ditandatangani oleh developer yang sama.

Jika Anda ingin menggunakan Firebase sebagai dependensi target framework dinamis, Anda juga harus menautkan Firebase secara dinamis. Jika tidak, Anda akan menemukan definisi class duplikat dalam runtime aplikasi. Penautan dinamis adalah perilaku default dengan use_frameworks!, tetapi Anda masih dapat menentukan penautan dinamis di Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

Perlu diperhatikan bahwa penautan dinamis dapat meningkatkan waktu peluncuran aplikasi, terutama jika aplikasi Anda memiliki banyak dependensi.