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
ध्यान दें कि डाइनैमिक लिंकिंग की वजह से, आपके ऐप्लिकेशन के लॉन्च होने में ज़्यादा समय लग सकता है. ऐसा खास तौर पर तब होता है, जब आपके ऐप्लिकेशन में कई डिपेंडेंसी हों.