החל מ-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 בנפרד בקובץ ההפעלה הראשי של האפליקציה, והדינמיט צריך לטעון אותם בזמן ההפעלה של האפליקציה מקשר. כדי לאפשר שיתוף קוד, כל ה-frameworks של Apple מקושרות באופן דינמי בין תהליכים; באופן דומה, אפשר להשתמש ב-frameworks דינמיות כדי לשתף קוד בין היעדים לאפליקציות וליעדים. לא ניתן לשתף מסגרות דינמיות בין אפליקציות נפרדות, גם אם שניהם חתומים על ידי אותו קוד למפתחים.
אם אתם רוצים להשתמש ב-Firebase כתלות ביעד של מסגרת דינמית,
צריך גם לקשר את Firebase באופן דינמי. אחרת,
כפילויות בהגדרות של כיתות
בסביבת זמן הריצה של האפליקציה. קישור דינמי הוא התנהגות ברירת המחדל ב-use_frameworks!
, אבל עדיין אפשר לציין קישור דינמי באופן מפורש ב-Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
חשוב לזכור שקישור דינמי עלול להאריך את זמן ההפעלה של האפליקציה, במיוחד אם יש לה הרבה יחסי תלות.