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