با شروع CocoaPods 1.9.0 و Firebase 7، میتوانید انتخاب کنید که آیا وابستگیهای Firebase شما بهعنوان چارچوبهای ایستا یا پویا ساخته شوند. توصیه میکنیم از چارچوبهای ایستا استفاده کنید، مگراینکه به رفتارهای کتابخانه پویای خاصی نیاز داشته باشید.
توجه داشته باشید که کتابخانههایی که خارج از GitHub توسعه یافتهاند فقط بهصورت ایستا میتوانند پیوند داده شوند حتی با CocoaPods نسخه ۱.۹.۰ و بالاتر. درحالحاضر، این فهرست کتابخانه شامل AdMob، Analytics، Firebase ML، و Performance Monitoring است. همه کانالهای توزیع دیگر، ازجمله فایل zip، Swift Package Manager، و Carthage فقط کتابخانههای پیوندشده بهصورت ایستا را ارائه میدهند.
این سند فرض میکند که شما با پیونددهی پویا و ایستا در پلاتفرمهای Apple آشنایی دارید. اگر با این مفاهیم آشنا نیستید، به اسناد زیر نگاهی بیندازید:
ازآنجاییکه این سند به انواع پیوند کتابخانه مربوط میشود و نه بارگیری بستههای منابع غیرقابلاجرا، اصطلاحات کتابخانه و چارچوب بهجای یکدیگر استفاده میشوند.
پیونددهی ایستا
کتابخانههای پیوندشده بهصورت ایستا در زمان ساخت در فایل اجرایی برنامه شما گنجانده میشوند. درنتیجه، فایلهای شیء در کتابخانه ایستا هنگام راهاندازی برنامه در آن وجود خواهند داشت و نیازی نیست که در زمان راهاندازی برنامه توسط پیونددهنده پویا حل شوند. درنتیجه، برنامههایی که از پیونددهی ایستا استفاده میکنند سریعتر راهاندازی خواهند شد. این امر به قیمت یک فایل اجرایی باینری / برنامه کمی بزرگتر تمام میشود، اگرچه باید توجه داشت که اندازه بزرگتر فایل اجرایی با عدم وجود کتابخانههای پویا بستهبندیشده جبران خواهد شد.
میتوانید با مشخص کردن صریح پیوند در Podfile خود، وابستگیهای Firebase را بهطور ثابت پیوند دهید:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
پیونددهی پویا
کتابخانههای پیوندشده پویا بهصورت جداگانه از فایل اجرایی اصلی برنامه در دسته برنامه ذخیره میشوند و باید در زمان راهاندازی برنامه توسط پیونددهنده پویا بار شوند. چارچوبهای Apple همگی بهصورت پویا پیوند داده شدهاند تا همرسانی کد بین فرایندها را فعال کنند؛ بهطور مشابه، میتوانید از چارچوبهای پویا برای همرسانی کد بین برنامه و هدفهای افزونه استفاده کنید. نمیتوانید چارچوبهای پویا را بین برنامههای جداگانه همرسانی کنید، حتی اگر هر دو توسط یک توسعهدهنده امضا شده باشند.
اگر میخواهید از Firebase بهعنوان وابستگی هدف چارچوب پویا استفاده کنید،
باید Firebase را بهصورت پویا نیز پیوند دهید؛ درغیراینصورت با
تعاریف کلاس تکراری
در زمان اجرای برنامهتان مواجه خواهید شد. پیونددهی پویا رفتار پیشفرض با
use_frameworks! است، اما همچنان میتوانید پیونددهی پویا را بهطور صریح در
Podfile خود مشخص کنید:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
توجه داشته باشید که پیونددهی پویا ممکن است زمان راهاندازی برنامهتان را افزایش دهد، بهویژه اگر برنامهتان وابستگیهای زیادی داشته باشد.