ios - आईओएस स्टेटिक बनाम गतिशील ढांचे स्पष्टीकरण




frameworks static-libraries (3)

मुझे यह मानना ​​है कि आईओएस 8 के रिलीज के साथ मैं आईओएस में गतिशील और स्थैतिक ढांचे के बारे में थोड़ा उलझन में हूं।

मैं अपनी लाइब्रेरी को वितरित करने का एक तरीका ढूंढ रहा हूं, और मुझे आईओएस 7 और उससे ऊपर का समर्थन करने की आवश्यकता है। (नोट: यह एक मालिकाना ढांचा होगा। मैं कोको फली का उपयोग नहीं कर सकता, और मैं भी स्रोत वितरित नहीं कर सकता)। यहां मैं जो जानता हूं वह यहां है:

  • आईओएस 8 ने आईओएस के लिए "एम्बेडेड फ्रेमवर्क" पेश किए, लेकिन, जैसा कि मैं समझता हूं, वे आईओएस 7 के लिए काम नहीं करते हैं, केवल आईओएस 8 और उसके बाद के लिए।
  • मेरे पास एक लाइब्रेरी (.a फ़ाइल) के रूप में मेरी लाइब्रेरी को वितरित करने का विकल्प है और हेडर भी वितरित करता है। मुझे पता है कि यह स्थिति से निपटने का एक आम तरीका है, लेकिन मैं उससे कुछ आसान खोजना चाहता हूं (और यदि संभव हो तो इसके साथ कुछ संसाधनों को बंडल करना भी)।
  • मैंने यह भी पाया है कि आईओएस 7 गतिशील। फ्रेमवर्क लाइब्रेरी (केवल स्थैतिक) का समर्थन नहीं करता है क्योंकि यह गतिशील लिंकिंग का समर्थन नहीं करता है। लेकिन आईओएस 8 करता है, साथ ही स्थैतिक लिंकिंग करता है।

और यहां इस जानकारी के बारे में मेरे प्रश्न हैं:

  • मैंने देखा कि मैं एक .framework लक्ष्य बना सकता हूं, और मैक-ओ प्रकार को "स्थिर लाइब्रेरी" में बदलकर इसे स्थैतिक बना सकता हूं। क्या यह बिना किसी समस्या के आईओएस 7 का समर्थन करने के लिए पर्याप्त होगा, और मेरी लाइब्रेरी को एक के रूप में वितरित करने के लिए भी पर्याप्त होगा .framework बंडल? यदि हां, तो आईओएस 8 में "एम्बेडेड फ्रेमवर्क" क्यों है जो एक सौदा बड़ा है, इंटरनेट पर कई संसाधन सुझाव दे रहे हैं? क्या मुझे कुछ याद आ रही है?
  • क्या मैं .framework को कोडलाइन करना जरूरी है जैसा कि मैं किसी अन्य एप्लिकेशन के साथ करता हूं?
  • यदि मुझे मेरी .framework फ़ाइल के साथ अन्य संसाधनों (जैसे कोर डेटा या छवियां) शामिल करने की आवश्यकता है तो क्या होगा? क्या मुझे इसके लिए एक अलग। बंडल फ़ाइल बनाने की आवश्यकता होगी?

आईओएस 8 से पहले, एक्सकोड ने केवल आईओएस के लिए स्थिर पुस्तकालय बनाने का विकल्प दिया। इसके साथ आम समस्या यह थी कि हमें बाइनरी और हेडर अलग से भेजना पड़ा।

बाद में, कुछ डेवलपर्स 'स्थिर ढांचे' बनाने के विचार के साथ आए। [.framework सिर्फ lib और हेडर के प्रतीकात्मक लिंक के साथ एक फ़ोल्डर है]। ऐसा एक उदाहरण है https://github.com/jverkoey/iOS-Framework

यह विकल्प आईओएस 7 या 8 या उसके पहले काम करेगा। क्योंकि वे हेडर्स फ़ाइलों को बंडल करने की सुविधा के साथ केवल स्थिर पुस्तकालय हैं।

संसाधनों के आपके प्रश्नों के लिए, हमें उन्हें 'बंडल' में बंडल करना होगा .. उन्हें शिपिंग के लिए मुझे यकीन नहीं है कि क्या हम उन्हें .framework फ़ोल्डर में संलग्न कर सकते हैं .. अतीत में मैं अपनी libs को जहाज के रूप में भेजता था एक स्थिर ढांचे और बंडल ...

हालांकि अगर आप स्विफ्ट का उपयोग करते हैं तो उपर्युक्त विकल्प आपके लिए काम नहीं करेगा। एक्सकोड इमारत स्थिर पुस्तकालयों का समर्थन नहीं करता है जिसमें स्विफ्ट कोड शामिल है।

यदि त्वरित उपयोग होता है तो आपको गतिशील ढांचे के साथ जाना होगा। सिद्धांत रूप में, आईओएस 7 में डायनामिक फ्रेमवर्क काम करते हैं .. लेकिन, मुझे लगता है कि ऐप आईओएस 7 को लक्षित कर रहा है और डायनामिक फ्रेमवर्क का उपयोग करता है :-)।

उम्मीद है की यह मदद करेगा


मेरे पास सभी जवाब नहीं हैं लेकिन मैं यहां आपके कुछ प्रश्नों को संबोधित करने का प्रयास करूंगा।

  • आपको आईओएस 7 में इन ढांचे का उपयोग करने के लिए चेतावनी मिलेगी, हालांकि यह सब एक चेतावनी है। यह answer देखें।

  • आप कोरडाटा जैसे अन्य संसाधनों को शामिल कर सकते हैं हालांकि आपको उन्हें मैन्युअल रूप से कोड में बनाना होगा। यहां एक tutorial जो कोर डेटा मॉडल बनाने का तरीका दिखाता है।

  • आपको आईओएस के लिए साइन डायनामिक लाइब्रेरी कोड करना होगा।

  • यदि आप इसे वितरित करने की योजना बना रहे हैं तो आपको यह सुनिश्चित करना होगा कि आपका ढांचा सिम्युलेटर और डिवाइस आर्किटेक्चर दोनों का समर्थन करता है।


एक्सकोड 9 के साथ आप स्विफ्ट के लिए भी स्थिर ढांचे बना सकते हैं। एबीआई स्रोत संगतता के कारण यह संभव है। आपको केवल फ्रेमवर्क लक्ष्य की बिल्ड सेटिंग्स के तहत Mach-O type को बदलने की ज़रूरत है। यह तकनीक हाइब्रिड फ्रेमवर्क (स्विफ्ट और ऑब्जेक्टिव-सी कोड के साथ ढांचे) पर भी लागू होती है।





ios-frameworks