CocoaPods 1.9.0 और Firebase 7 से, यह चुना जा सकता है कि Firebase डिपेंडेंसी, स्टैटिक या डाइनैमिक फ़्रेमवर्क के तौर पर बनाई जाएं या नहीं. हमारा सुझाव है कि आप स्टैटिक फ़्रेमवर्क का इस्तेमाल करें. हालांकि, अगर आपको डाइनैमिक लाइब्रेरी के कुछ खास फ़ंक्शन की ज़रूरत है, तो डाइनैमिक फ़्रेमवर्क का इस्तेमाल करें.
ध्यान दें कि GitHub के बाहर डेवलप की गई लाइब्रेरी को सिर्फ़ स्टैटिक तौर पर लिंक किया जा सकता है. भले ही, CocoaPods 1.9.0 और इसके बाद के वर्शन का इस्तेमाल किया जा रहा हो. फ़िलहाल, इस लाइब्रेरी की सूची में AdMob, Analytics, Firebase ML, और Performance Monitoring शामिल हैं. डिस्ट्रिब्यूशन के अन्य सभी चैनल, सिर्फ़ स्टैटिक तौर पर लिंक की गई लाइब्रेरी उपलब्ध कराते हैं. इनमें ZIP फ़ाइल, Swift Package Manager, और Carthage शामिल हैं.
इस दस्तावेज़ में यह माना गया है कि आपको Apple प्लैटफ़ॉर्म पर डाइनैमिक और स्टैटिक लिंकिंग की जानकारी है. अगर आपको इन कॉन्सेप्ट के बारे में जानकारी नहीं है, तो यह दस्तावेज़ देखें:
- Mach-O प्रोग्रामिंग के विषय
- डाइनैमिक लाइब्रेरी प्रोग्रामिंग के विषय
- लाइब्रेरी में Firebase का इस्तेमाल करना
यह दस्तावेज़, लाइब्रेरी लिंकेज के टाइप से जुड़ा है, न कि एक्ज़ीक्यूट न किए जा सकने वाले रिसॉर्स बंडल को लोड करने से. इसलिए, लाइब्रेरी और फ़्रेमवर्क शब्दों को एक-दूसरे की जगह इस्तेमाल किया गया है.
स्टैटिक लिंकिंग
स्टैटिक तौर पर लिंक की गई लाइब्रेरी, बिल्ड के समय आपके ऐप्लिकेशन के एक्ज़ीक्यूटेबल में बंडल की जाती हैं. इस वजह से, स्टैटिक लाइब्रेरी में मौजूद ऑब्जेक्ट फ़ाइलें, ऐप्लिकेशन लॉन्च होने पर उसमें मौजूद होंगी. साथ ही, डाइनैमिक लिंकर को ऐप्लिकेशन लॉन्च होने के समय उन्हें रिज़ॉल्व करने की ज़रूरत नहीं होगी. इस वजह से, स्टैटिक लिंकिंग का इस्तेमाल करने वाले ऐप्लिकेशन तेज़ी से लॉन्च होंगे. हालांकि, इसके लिए बाइनरी / ऐप्लिकेशन का साइज़ थोड़ा बड़ा हो जाता है. हालांकि, यह ध्यान रखना ज़रूरी है कि बंडल की गई डाइनैमिक लाइब्रेरी न होने की वजह से, बाइनरी / ऐप्लिकेशन का साइज़ बड़ा हो जाएगा.
अपनी Podfile में लिंकेज की जानकारी साफ़ तौर पर देकर, Firebase डिपेंडेंसी को स्टैटिक तौर पर लिंक किया जा सकता है:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
डाइनैमिक लिंकिंग
डाइनैमिक तौर पर लिंक की गई लाइब्रेरी, आपके ऐप्लिकेशन बंडल में सेव की जाती हैं. ये लाइब्रेरी, आपके ऐप्लिकेशन की मुख्य एक्ज़ीक्यूटेबल फ़ाइल से अलग होती हैं. साथ ही, ऐप्लिकेशन लॉन्च होने के समय, डाइनैमिक लिंकर को इन्हें लोड करना ज़रूरी होता है. Apple के सभी फ़्रेमवर्क डाइनैमिक तौर पर लिंक किए जाते हैं, ताकि प्रोसेस के बीच कोड शेयर किया जा सके. इसी तरह, डाइनैमिक फ़्रेमवर्क का इस्तेमाल करके, अपने ऐप्लिकेशन और एक्सटेंशन टारगेट के बीच कोड शेयर किया जा सकता है. अलग-अलग ऐप्लिकेशन के बीच डाइनैमिक फ़्रेमवर्क शेयर नहीं किए जा सकते. भले ही, दोनों ऐप्लिकेशन पर एक ही डेवलपर ने हस्ताक्षर किए हों.
अगर आपको डाइनैमिक फ़्रेमवर्क टारगेट की डिपेंडेंसी के तौर पर Firebase का इस्तेमाल करना है, तो आपको Firebase को डाइनैमिक तौर पर भी लिंक करना होगा. ऐसा न करने पर, आपको अपने ऐप्लिकेशन के रनटाइम में डुप्लीकेट क्लास डेफ़िनिशन दिखेंगी. use_frameworks! में डाइनैमिक लिंकिंग की सुविधा डिफ़ॉल्ट रूप से चालू होती है. हालांकि, Podfile में डाइनैमिक लिंकिंग को साफ़ तौर पर तय किया जा सकता है:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
ध्यान दें कि डाइनैमिक लिंकिंग की वजह से, आपके ऐप्लिकेशन को लॉन्च होने में ज़्यादा समय लग सकता है. ऐसा खास तौर पर तब होता है, जब आपका ऐप्लिकेशन कई डिपेंडेंसी पर निर्भर हो.