Firebase डिपेंडेंसी को स्टैटिक या डाइनैमिक तरीके से लिंक करें

CocoaPods 1.9.0 और Firebase 7 के साथ, आपके पास यह चुनने का विकल्प होता है कि आपकी Firebase डिपेंडेंसी को स्टैटिक या डाइनैमिक फ़्रेमवर्क के तौर पर बनाया जाए या नहीं. हमारा सुझाव है कि जब तक आपको किसी डाइनैमिक लाइब्रेरी के व्यवहार की ज़रूरत न हो, तब तक स्टैटिक फ़्रेमवर्क का इस्तेमाल न करें.

ध्यान दें कि GitHub के बाहर डेवलप की गई लाइब्रेरी को सिर्फ़ CocoaPods के 1.9.0 और इसके बाद के वर्शन के साथ भी स्टैटिक तरीके से लिंक किया जा सकता है. फ़िलहाल, इस लाइब्रेरी सूची में AdMob, Analytics, Firebase एमएल, और परफ़ॉर्मेंस मॉनिटर करने की सुविधा शामिल है. अन्य सभी डिस्ट्रिब्यूशन चैनल सिर्फ़ ऐसी लाइब्रेरी उपलब्ध कराते हैं जिनमें ZIP फ़ाइल, Swift Package Manager, और Carthage शामिल हैं.

इस दस्तावेज़ में, Apple प्लैटफ़ॉर्म पर डाइनैमिक और स्टैटिक लिंकिंग के बारे में काम करने की जानकारी दी गई है. अगर आपको इन कॉन्सेप्ट के बारे में पता नहीं है, तो ये दस्तावेज़ देखें:

इस दस्तावेज़ में, लाइब्रेरी के लिंक किए जाने के अलग-अलग तरीकों के बारे में बात की गई है, न कि एक्ज़ीक्यूटेबल रिसॉर्स बंडल के लोड होने के बारे में. इसलिए, लाइब्रेरी और फ़्रेमवर्क शब्दों को एक-दूसरे की जगह इस्तेमाल किया जाता है.

स्टैटिक लिंकिंग

बिल्ड के समय, स्टैटिक रूप से लिंक की गई लाइब्रेरी आपके ऐप्लिकेशन के एक्ज़ीक्यूटेबल के साथ बंडल की जाती हैं. इस वजह से, स्टैटिक लाइब्रेरी में मौजूद ऑब्जेक्ट फ़ाइलें, ऐप्लिकेशन के लॉन्च होने पर उसमें मौजूद रहेंगी. डाइनैमिक लिंकर, ऐप्लिकेशन को लॉन्च करते समय इन ऑब्जेक्ट को रिज़ॉल्व नहीं कर पाएगा. ऐसे में, स्टैटिक लिंकिंग का इस्तेमाल करने वाले ऐप्लिकेशन तेज़ी से लॉन्च होेंगे. इसकी वजह कुछ बड़ी बाइनरी / ऐप्लिकेशन की एक्ज़ीक्यूटेबल फ़ाइल है. हालांकि, इस बात का ध्यान रखना चाहिए कि बंडल की गई डाइनैमिक लाइब्रेरी की कमी की वजह से, एक्ज़ीक्यूटेबल साइज़ के बड़े साइज़ को आकलन किया जाएगा.

अपने Podfile में लिंकेज की जानकारी साफ़ तौर पर देकर, Firebase डिपेंडेंसी को स्टैटिक तरीके से लिंक किया जा सकता है:

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

डाइनैमिक लिंकिंग

डाइनैमिक रूप से लिंक की गई लाइब्रेरी आपके ऐप्लिकेशन बंडल में, आपके ऐप्लिकेशन के मुख्य एक्ज़ीक्यूटेबल से अलग सेव की जाती हैं और डाइनैमिक लिंकर उन्हें ऐप्लिकेशन लॉन्च करते समय लोड होना चाहिए. Apple के सभी फ़्रेमवर्क को डाइनैमिक तरीके से लिंक किया जाता है, ताकि अलग-अलग प्रोसेस के बीच कोड शेयर किया जा सके. इसी तरह, अपने ऐप्लिकेशन और एक्सटेंशन टारगेट के बीच कोड शेयर करने के लिए डाइनैमिक फ़्रेमवर्क का इस्तेमाल किया जा सकता है. अलग-अलग ऐप्लिकेशन के बीच डाइनैमिक फ़्रेमवर्क को शेयर नहीं किया जा सकता. भले ही, दोनों एक ही डेवलपर ने साइन किए हों.

अगर आपको डाइनैमिक फ़्रेमवर्क टारगेट की डिपेंडेंसी के तौर पर Firebase का इस्तेमाल करना है, तो आपको Firebase को डाइनैमिक तौर पर भी लिंक करना होगा. ऐसा न करने पर, आपको अपने ऐप्लिकेशन के रनटाइम में डुप्लीकेट क्लास डेफ़िनिशन की जानकारी मिलेगी. use_frameworks! के साथ, डाइनैमिक लिंकिंग डिफ़ॉल्ट तरीके से काम करती है, लेकिन आपके पास अब भी Podfile में डाइनैमिक लिंकेज की जानकारी साफ़ तौर पर देने का विकल्प है:

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

ध्यान दें कि डाइनैमिक लिंकिंग से आपके ऐप्लिकेशन के लॉन्च का समय बढ़ सकता है. खास तौर पर, ऐसा तब हो सकता है, जब आपके ऐप्लिकेशन पर कई डिपेंडेंसी हों.