CocoaPods 1.9.0 ve Firebase 7'den itibaren, Firebase bağımlılıklarınızın statik veya dinamik çerçeveler olarak oluşturulup oluşturulmayacağını seçebilirsiniz. Belirli dinamik kitaplık davranışlarına ihtiyacınız yoksa statik çerçeveler kullanmanızı öneririz.
GitHub dışında geliştirilen kitaplıkların, CocoaPods 1.9.0 ve sonraki sürümlerde bile yalnızca statik olarak bağlanabileceğini unutmayın. Şu anda bu kitaplık listesinde AdMob, Analytics, Firebase ML ve Performance Monitoring yer almaktadır. Zip dosyası, Swift Package Manager ve Carthage dahil olmak üzere diğer tüm dağıtım kanalları yalnızca statik olarak bağlı kitaplıklar sağlar.
Bu belgede, Apple platformlarındaki dinamik ve statik bağlantı hakkında bilgi sahibi olduğunuz varsayılır. Bu kavramlara aşina değilseniz aşağıdaki dokümanlara göz atın:
- Mach-O Programming Topics (Mach-O Programlama Konuları)
- Dinamik Kitaplık Programlama Konuları
- Kitaplıklarda Firebase'i kullanma
Bu belgede, kitaplık bağlantı türleri ele alındığından ve çalıştırılamayan kaynak paketlerinin yüklenmesi ele alınmadığından kitaplık ve çerçeve terimleri birbirinin yerine kullanılmaktadır.
Statik bağlama
Statik olarak bağlanan kitaplıklar, derleme sırasında uygulamanızın yürütülebilir dosyasına paketlenir. Sonuç olarak, statik kitaplıktaki nesne dosyaları uygulamanız başlatıldığında uygulamanızda bulunur ve uygulama başlatma sırasında dinamik bağlayıcı tarafından çözümlenmesi gerekmez. Sonuç olarak, statik bağlantı kullanan uygulamalar daha hızlı başlatılır. Bu durum, biraz daha büyük bir ikili / uygulama yürütülebilir dosyası pahasına gerçekleşir. Ancak daha büyük yürütülebilir dosya boyutunun, paketlenmiş dinamik kitaplıkların olmamasıyla dengeleneceği unutulmamalıdır.
Bağlantıyı Podfile'ınızda açıkça belirterek Firebase bağımlılıklarının statik olarak bağlanmasını zorlayabilirsiniz:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Dinamik bağlama
Dinamik olarak bağlanan kitaplıklar, uygulama paketinizde uygulamanızın ana yürütülebilir dosyasından ayrı olarak depolanır ve dinamik bağlayıcı tarafından uygulama başlatılırken yüklenmelidir. Apple'ın çerçeveleri, süreçler arasında kod paylaşımını etkinleştirmek için dinamik olarak bağlanır. Benzer şekilde, uygulamanız ve uzantı hedefleriniz arasında kod paylaşmak için dinamik çerçeveler kullanabilirsiniz. Aynı geliştirici tarafından imzalanmış olsalar bile ayrı uygulamalar arasında dinamik çerçeveler paylaşamazsınız.
Firebase'i dinamik bir çerçeve hedefinin bağımlılığı olarak kullanmak istiyorsanız Firebase'i de dinamik olarak bağlamanız gerekir. Aksi takdirde, uygulamanızın çalışma zamanında yinelenen sınıf tanımlarıyla karşılaşırsınız. use_frameworks! ile varsayılan davranış dinamik bağlantıdır ancak Podfile'ınızda dinamik bağlantıyı açıkça belirtebilirsiniz:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Dinamik bağlantı oluşturmanın, özellikle uygulamanızın çok fazla bağımlılığı varsa uygulamanızın başlatma süresini uzatabileceğini unutmayın.