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

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

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

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

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

קישור סטטי

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

אתה יכול לכפות קישור סטטי של תלות ב-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

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