החל מ-CocoaPods 1.9.0 ו-Firebase 7, אתם יכולים לבחור אם יחסי התלות של Firebase ייבנו כ-frameworks סטטיים או דינמיים. מומלץ להשתמש ב-frameworks סטטיים, אלא אם אתם צריכים התנהגויות מסוימות של ספריות דינמיות.
שימו לב שספריות שפותחו מחוץ ל-GitHub אפשר לקשר רק באופן סטטי, גם עם CocoaPods בגרסה 1.9.0 ואילך. נכון לעכשיו, רשימת הספריות הזו כוללת את AdMob, Analytics, Firebase ML ו-Performance Monitoring. כל ערוצי ההפצה האחרים, כולל קובץ ה-ZIP, Swift Package Manager ו-Carthage, מספקים רק ספריות שמקושרות באופן סטטי.
ההנחה במאמר הזה היא שיש לכם ידע מעשי בקישור דינמי וסטטי בפלטפורמות של אפל. אם אתם לא מכירים את המושגים האלה, כדאי לקרוא את המאמרים הבאים:
המסמך הזה עוסק בסוגים של קישור ספריות ולא בטעינה של חבילות משאבים שלא ניתנות להפעלה, לכן המונחים ספרייה ומסגרת משמשים לסירוגין.
קישור סטטי
ספריות שמקושרות באופן סטטי נכללות בקובץ ההפעלה של האפליקציה בזמן ה-build. כתוצאה מכך, קובצי האובייקטים בספרייה הסטטית יהיו נוכחים באפליקציה כשהיא תופעל, ולא יהיה צורך לפתור אותם בזמן הפעלת האפליקציה על ידי המקשר הדינמי. כתוצאה מכך, אפליקציות שמשתמשות בקישור סטטי יופעלו מהר יותר. החיסרון הוא שהקובץ הבינארי או קובץ ההפעלה של האפליקציה יהיו קצת יותר גדולים, אבל הגודל של קובץ ההפעלה יתקזז עם החיסכון במקום של הספריות הדינמיות שלא צריך לכלול.
אפשר לאלץ קישור סטטי של יחסי תלות של Firebase על ידי ציון מפורש של הקישור ב-Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
קישור דינמי
ספריות שמקושרות באופן דינמי מאוחסנות ב-App Bundle בנפרד מקובץ ההפעלה הראשי של האפליקציה, וצריך לטעון אותן בזמן ההפעלה של האפליקציה באמצעות המקשר הדינמי. כל מסגרות העבודה של אפל מקושרות באופן דינמי כדי לאפשר שיתוף קוד בין תהליכים. באופן דומה, אתם יכולים להשתמש במסגרות עבודה דינמיות כדי לשתף קוד בין האפליקציה לבין יעדי התוספים. אי אפשר לשתף מסגרות דינמיות בין אפליקציות נפרדות, גם אם שתיהן חתומות על ידי אותו מפתח.
אם רוצים להשתמש ב-Firebase כתלות של יעד מסגרת דינמי, צריך גם לקשר את Firebase באופן דינמי. אחרת, תיתקלו בהגדרות כפולות של מחלקות בזמן הריצה של האפליקציה. קישור דינמי הוא התנהגות ברירת המחדל ב-use_frameworks!, אבל עדיין אפשר לציין במפורש קישור דינמי ב-Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
חשוב לזכור שקישור דינמי עלול להאריך את זמן ההפעלה של האפליקציה, במיוחד אם יש לה הרבה יחסי תלות.