iOS स्टेटिक बनाम डायनेमिक फ्रेमवर्क स्पष्टीकरण


115

मुझे यह स्वीकार करना होगा कि IOS 8 की रिलीज के साथ मैं iOS में गतिशील और स्थिर रूपरेखा के बारे में थोड़ा भ्रमित हूं।

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

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

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

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

1
"iOS 7 का समर्थन नहीं करता है। फ़्रामवर्क लाइब्रेरीज़ क्योंकि यह डायनेमिक लिंकिंग का समर्थन नहीं करता है" यह कथन सही नहीं है।
मिधुन एमपी

1
समझा। क्या आप मुझे सही वाक्य बता सकते हैं? क्या यह गलत है क्योंकि iOS 7 गतिशील लिंकिंग का समर्थन करता है या क्योंकि iOS 7 समर्थन करता है। अथवा दोनों?
csotiriou

1
Remeber AVFoundation और CoreGraphics सभी .framework हैं। : शायद इस मदद आप अपने सभी सवालों के जवाब खोजने के लिए raywenderlich.com/65964/create-a-framework-for-ios
Midhun सांसद

मैंने सजा तय कर दी। मैंने पहले ही लिंक पढ़ लिया है, इससे पहले कि मैं अपने प्रश्न पोस्ट करूँ। यह लिंक मेरे सवालों के संबंध में कुछ भी स्पष्ट नहीं करता है। यह एक स्टैटिक लाइब्रेरी से शुरू होता है और इसे एक .framework फाइल MANUALLY में लपेटता है। मैं Xcode 6 में कोको टच फ्रेमवर्क लक्ष्य के बारे में बात कर रहा हूं और फिर टाइप को एक स्थिर लाइब्रेरी में बदल रहा हूं। इसमें कोड साइनिंग का उल्लेख नहीं है (क्यों और यदि यह आवश्यक है), अतिरिक्त संसाधन, आदि
csotiriou

1
आप एक मालिकाना ढांचे (जैसे पार्स) को वितरित करने के लिए कोकोआपोड्स का उपयोग कर सकते हैं
रिक सैंटोस

जवाबों:


69

IOS8 से पहले, Xcode ने केवल iOS के लिए स्टैटिक लाइब्रेरी बनाने के विकल्प की अनुमति दी थी। इसके साथ आम समस्या यह थी कि हमें बाइनरी और हेडर को अलग-अलग शिप करना था।

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

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

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

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

यदि स्विफ्ट उपयोग है तो आपको डायनेमिक फ्रेमवर्क के साथ जाना होगा। सिद्धांत रूप में, डायनेमिक फ्रेमवर्क iOS7 में काम करता है .. लेकिन, मुझे लगता है कि यदि ऐप iOS7 को लक्षित कर रहा है और डायनेमिक फ्रेमवर्क :-) का उपयोग करता है तो iTunes Connect अस्वीकार कर देगा।

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


16

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


महान टिप। पता नहीं क्यों इस जवाब में नीचे स्कोर किया गया क्योंकि इससे मुझे मदद मिली। \ लक्ष्य'बिल्ड सेटिंग्स \ मच-ओ-टाइप और स्टेटिक फ्रेमवर्क का चयन करें।
rustyMagnet

3
अबी अनुकूलता स्विफ्ट 4 में उपलब्ध नहीं है
csotiriou

7

staticया dynamicनाम में आमतौर पर एक Linking[के बारे में] प्रकार में इंगित करता है

चौखटे हो सकते हैं staticया dynamic[स्थैतिक या गतिशील जांचें]

आप पुस्तकालय का स्वरूप है कि एक पर असर पड़ेगा बदल सकते हैं Linkerबदलकर Framework target -> Build Settings -> Mach-O Type[बारे में] के लिए Static Libraryया Dynamic Library। डिफ़ॉल्ट रूप से Xcode का Dynamic Libraryमूल्य है।

इस सेटिंग पर निर्भर करता है कि विभिन्न प्रकार के बाइनरी उत्पन्न होंगे

आपके द्वारा किसी उपभोक्ता को सफलतापूर्वक कॉन्फ़िगर करने के बाद [लिंक बनाम एम्बेड करें]

Static Linker ld : संकलित समय पर static libraryनिष्पादन योग्य ऑब्जेक्ट फ़ाइल में सभी कोड शामिल होंगे ।

Dynamic Linker डाइल्ड : लोड / रन टाइम पर @rpath[के बारे में] का उपयोग करके एम्बेडेड ढांचे को खोजने और इसे लिंक करने का प्रयास करेंगे

[शब्दावली]


6

स्विफ्ट स्टेटिक लिब में काम नहीं करता है। यदि आपको डायनामिक फ्रेमवर्क का उपयोग करना है, तो आपको आईओएस को 8.0 पर सेट करना होगा क्योंकि डायनेमिक फ्रेमवर्क के साथ AppStore ios 7 को अस्वीकार करता है


आप एक स्थिर पुस्तकालय को तेजी से आधारित परियोजना में आयात कर सकते हैं
C0D3

5

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

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.