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

החל מ-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, מספקים רק ספריות מקושרות באופן סטטי.

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

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

קישור סטטי

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

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

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

קישור דינמי

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

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

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

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