קישור של יחסי תלות ב-Firebase באופן סטטי או דינמי

החל מ-CocoaPods 1.9.0 ומ-Firebase 7, אתם יכולים לבחור אם יחסי התלות של Firebase ייבנו כמסגרות סטטיות או דינמיות. מומלץ להשתמש במסגרות סטטיות, אלא אם נדרשים התנהגויות מסוימות של ספריות דינמיות.

שימו לב: אפשר לקשר ספריות שפותחו מחוץ ל-GitHub רק באופן סטטי, גם אם משתמשים ב-CocoaPods בגרסה 1.9.0 ואילך. כרגע, רשימת הספרייה הזו כוללת את AdMob,‏ Analytics,‏ Firebase ML ו-Performance Monitoring. כל שאר ערוצי ההפצה, כולל קובץ ה-ZIP, ‏ Swift Package Manager ו-Carthage, מספקים רק ספריות עם קישור סטטי.

ההנחה במאמר הזה היא שיש לכם ידע מעשי בקישור דינמי וסטטי בפלטפורמות של אפל. אם אתם לא מכירים את המושגים האלה, כדאי לעיין במסמכים הבאים:

במסמך הזה אנחנו מתמקדים בסוגים של קישור ספריות ולא בטעינה של חבילות משאבים שאינן ניתנות להפעלה, ולכן אנחנו משתמשים במונחים ספרייה ומסגרת לסירוגין.

קישור סטטי

ספריות שמקושרות באופן סטטי נארזות בקובץ ההפעלה של האפליקציה בזמן הבנייה. כתוצאה מכך, קובצי האובייקט בספרייה הסטטית יהיו זמינים באפליקציה כשהיא תופעל, ולא יהיה צורך לפתור אותם בזמן הפעלת האפליקציה באמצעות ה-linker הדינמי. כתוצאה מכך, אפליקציות שמשתמשות בקישור סטטי יופעלו מהר יותר. החיסרון הוא שקובץ הבינארי או קובץ ההפעלה של האפליקציה יהיו גדולים יותר, אבל צריך לזכור שהגודל הגדול יותר של קובץ ההפעלה יקוזז בגלל היעדר ספריות דינמיות בחבילה.

אפשר לכפות קישור סטטי של תלות ב-Firebase על ידי ציון הקישור באופן מפורש בקובץ Podfile:

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

קישור דינמי

ספריות שמקושרות באופן דינמי מאוחסנות בחבילת האפליקציה בנפרד מהקובץ הניתן להפעלה הראשי של האפליקציה, והן צריכות להיטען בזמן הפעלת האפליקציה על ידי המקשר הדינמי. כל המסגרות של אפל מקושרות באופן דינמי כדי לאפשר שיתוף קוד בין תהליכים. באופן דומה, אפשר להשתמש במסגרות דינמיות כדי לשתף קוד בין האפליקציה לבין יעדי ההרחבה. אי אפשר לשתף מסגרות דינמיות בין אפליקציות נפרדות, גם אם שתיהן חתומות על ידי אותו מפתח.

אם רוצים להשתמש ב-Firebase כתלות של יעד של מסגרת דינמית, צריך גם לקשר את Firebase באופן דינמי. אחרת, יופיעו הגדרות כיתה כפולות בזמן הריצה של האפליקציה. קישור דינמי הוא התנהגות ברירת המחדל ב-use_frameworks!, אבל עדיין אפשר לציין במפורש קישור דינמי ב-Podfile:

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

שימו לב: קישור דינמי עשוי להאריך את זמן ההפעלה של האפליקציה, במיוחד אם יש לאפליקציה הרבה תלותיות.