Firebase bağımlılıklarını statik veya dinamik olarak bağlama

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 alıyor. 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 dokümanda, Apple platformlarında dinamik ve statik bağlantı oluşturma hakkında bilgi sahibi olduğunuz varsayılmaktadır. Bu kavramlara aşina değilseniz aşağıdaki belgelere göz atın:

Bu doküman, yürütülebilir olmayan kaynak paketlerinin yüklenmesiyle değil, kitaplık bağlantısı türleriyle ilgili olduğundan kitaplık ve çerçeve terimleri birbirinin yerine kullanılır.

Statik bağlantı

Statik olarak bağlantılı kitaplıklar, derleme sırasında uygulamanızın yürütülebilir dosyasına eklenir. Sonuç olarak, statik kitaplıktaki nesne dosyaları uygulamanız başlatıldığında mevcut olur ve uygulama başlatma sırasında dinamik bağlayıcı tarafından çözümlenmesi gerekmez. Bu nedenle, statik bağlantı kullanan uygulamalar daha hızlı başlatılır. Bu, biraz daha büyük bir ikili program / 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ğini belirtmek gerekir.

Podfile'ınızda bağlantıyı açıkça belirterek Firebase bağımlılıklarının statik olarak bağlanmasını zorunlu kılabilirsiniz:

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

Dinamik bağlantı

Dinamik olarak bağlantılı kitaplıklar, uygulama paketinizde uygulamanızın ana yürütülebilir dosyasından ayrı olarak depolanır ve uygulama başlatma sırasında dinamik bağlayıcı tarafından 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, uygulamanız ile uzantı hedefleriniz arasında kod paylaşmak için dinamik çerçeveler kullanabilirsiniz. Aynı geliştirici tarafından imzalanmış olsalar bile dinamik çerçeveleri ayrı uygulamalar arasında paylaşamazsınız.

Firebase'i dinamik bir çerçeve hedefinin bağımlılığı olarak kullanmak istiyorsanız Firebase'i dinamik olarak da 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. Dinamik bağlantı, use_frameworks! ile varsayılan davranıştır ancak Podfile'ınızda dinamik bağlantıyı açıkça belirtebilirsiniz:

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

Dinamik bağlantı, özellikle uygulamanızın çok sayıda bağımlılığı varsa uygulamanızın başlatma süresini uzatabilir.