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:
Bu belgede, kitaplık bağlantı türleri ele alındığından ve yürütülemeyen 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. Bu nedenle, 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, uygulamanızın ana yürütülebilir dosyasından ayrı olarak uygulama paketinizde depolanır ve dinamik bağlayıcı tarafından uygulama başlatılırken yüklenmelidir. Apple'ın çerçeveleri, işlemler arasında kod paylaşımını etkinleştirmek için dinamik olarak bağlanır. Benzer şekilde, uygulama 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şlatılma süresini uzatabileceğini unutmayın.