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

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

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

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

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

קישור סטטי

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

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

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

קישור דינמי

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

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

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

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