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

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

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

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

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

קישור סטטי

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

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

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

קישור דינמי

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

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

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

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