एंबेडेड बायनेरिज़ और लिंक्ड फ्रेमवर्क में क्या अंतर है


87

बाहरी फ्रेमवर्क का उपयोग करते समय Xcode में अब एंबेडेड बायनेरी के साथ-साथ लिंक्ड फ्रेमवर्क अनुभाग भी होता है।

यहाँ छवि विवरण दर्ज करें

जब आप बाहरी फ्रेमवर्क और फाइंडर-> इसे Xcode में खींचते हैं, तो यह फ्रेमवर्क को लिंक्ड फ्रेमवर्क और लाइब्रेरी सेक्शन में रख देगा ।

जब आप कार्थेज के साथ एक पुस्तकालय का निर्माण करते हैं तो यह एंबेडेड बायनेरिज़ अनुभाग में खींचने की सलाह देता है ।

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

तो, कौन सही है? कार्थेज या बाकी इंटरनेट? और एक्सकोड परियोजनाओं में बाहरी संसाधनों को शामिल करने के लिए 2 विकल्प क्यों हैं?


और जब आप डिवाइस पर परीक्षण करते हैं तो क्या यह काम करता है?
ट्रोजनफो

@trojanfoe हाँ यह करता है।
मैक्सिम वीक्स्लर

इसका मतलब यह नहीं है, जब तक कि यह 1) एम्बेडेड बायनेरी सेक्शन में या 2) बिल्ड के दौरान ऐप बंडल में फ्रेमवर्क को कॉपी करने के लिए बिल्ड स्टेप नहीं है।
ट्रोजनफॉए

2
कार्टेज केवल OSX अनुप्रयोगों के लिए "एंबेडेड बायनेरिज़" में खींचने की सलाह देता है। IOS के लिए, वे "लिंक्ड फ्रेमवर्क एंड लाइब्रेरी" की सलाह देते हैं।
दमण

जवाबों:


72
  1. लिंकिंग- हमें एक फ्रेमवर्क लिंक करना होगा यदि हम इसमें परिभाषित किसी भी एपीआई का उपयोग करते हैं।

  2. एंबेडिंग - यह प्रक्रिया सुनिश्चित करेगी कि जोड़ा गया ढांचा ऐप बंडल के भीतर एम्बेडेड होगा, और संभावित रूप से ऐप और किसी भी एक्सटेंशन बंडल के बीच कोड साझा करने में मदद करेगा। हम केवल तीसरे पक्ष के ढांचे को एम्बेड करते हैं, न कि iOS द्वारा प्रदान किए गए उपकरण के रूप में वे आसानी से उपलब्ध हैं। यदि हम एम्बेड कर रहे हैं, इसका मतलब है कि, हमें उनसे भी लिंक करने की आवश्यकता होगी ताकि Xcode कंपाइल करें और बिल्ड बना सकें। जब ऐप डिवाइस में चलता है, तो जरूरत पड़ने पर एम्बेडेड फ्रेमवर्क को मेमोरी में लोड किया जाएगा।


1
"जब ज़रूरत होती है" भाग के साथ आपका क्या मतलब है? क्या इसका मतलब यह है कि रनटाइम के दौरान जरूरत पड़ने पर एम्बेडेड फ्रेमवर्क लोड हो जाता है? इसके अलावा, आपको क्या लगता है कि लिंकिंग डायनामिक फ्रेमवर्क के लिए कब होगी?
6

क्या कोई ऐसा मामला है जिसकी हमें जरूरत है और embedइसे नहीं link? और इसके विपरीत? और क्यों?
एलनिनली

मुझे लगता है कि आपको केवल ऐसे फ्रेमवर्क लिंक करने की आवश्यकता है जिनके एपीआई का आप सीधे कोड में उपयोग करते हैं, सकर्मक निर्भरताएं जो कि आवेदन कोड में संदर्भित नहीं हैं, बस सही होने पर मुझे एम्बेड किया जाना चाहिए।
वर्नर अल्टिवैचर

15

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

हालांकि, iOS8 में सभी 3 पार्टी फ्रेमवर्क को "एम्बेडेड" करने की आवश्यकता है। यहां तक ​​कि विभिन्न कार्यक्रमों के बीच साझा किया गया एक ढांचा भी उन कार्यक्रमों में से हर एक में "एम्बेडेड" होना चाहिए। इस मामले में, जहां इसे साझा स्थान पर डिवाइस में स्थापित किया गया था, साझा स्थान से समान "एम्बेडेड" कोड का उपयोग करके कोई भी अन्य इंस्टॉलेशन प्रक्रिया उस मौजूदा इंस्टॉलेशन का फिर से उपयोग कर सकती है। यह iOS8 के लिए विशिष्ट है, यह iOS8 से पहले संभव नहीं है और iOS दुनिया के बाहर यह उत्तर सटीक नहीं होगा।


2
"बाइनरी को एम्बेड करने से उपयोगकर्ता के लिए अपने उत्पाद को स्थापित करना आसान हो जाएगा यदि उनके पास अपनी मशीनों पर पहले से ही उस सामान की स्थापना नहीं है" OSX की तरह लगता है, न कि iOS ... यदि उनके पास पुस्तकालय नहीं है स्थापित (यानी यह गैर-मानक है) तो ऐप बस लोड नहीं करेगा।
ट्रोजनफो

यह केवल लोड नहीं होगा, @trojanfoe, इसे अस्वीकार कर दिया जाएगा और आप इसे पहली जगह में स्थापित नहीं कर सकते (जब तक आप डेवलपर नहीं हैं या एंटरप्राइज़ खाते का उपयोग नहीं करते हैं ...)
doggod

आईओएस 8 के बाद से गतिशील रूप से जुड़े ढांचे संभव हैं
बस्ती

जब उपयोगकर्ता आपके ऐप को स्थापित करता है और यदि उस ऐप में एक गतिशील रूप से जुड़ा हुआ ढांचा शामिल है, तो उस ढांचे को स्वचालित रूप से खोजा जा सकता है। हालांकि, यह एक अतिरिक्त बिंदु है जो उपयोगकर्ता की स्थापना प्रक्रिया के दौरान विफल हो सकता है, लिंक को संपादित करने में त्रुटि होती है जो एप्लिकेशन को समाप्त करती है। इसलिए मुझे कोई कारण नहीं दिखता कि इसका जवाब केवल ओएस एक्स पर लागू होना चाहिए और आईओएस पर नहीं। कृपया और अधिक विशिष्ट हो अगर आपको मेरे उत्तर से संबंधित सुधार के लिए कमरा दिखाई दे। या एक साथी डेवलपर को पूर्ण SO सदस्य बनाने के लिए उस उत्तर का उत्थान करें, यदि आपको लगता है कि उत्तर पहले से ही सटीक है;)
बस्ती

यह आपके उत्तर का वैकल्पिक पहलू है जिस पर मुझे आपत्ति है। यदि फ्रेमवर्क 3-पार्टी है तो यह ऐप बंडल का हिस्सा होना चाहिए। अवधि। यह OSX ऐप्स के लिए भी काफी हद तक सही है (निश्चित रूप से मैक ऐप स्टोर के माध्यम से वितरित ऐप के लिए)।
trojanfoe

0

Linkingइसके बारे में अधिक Linkerसंकलन समय या लोड / रन समय पर काम करता है। Linker नकल एक Libraryलक्ष्य बाइनरी में। के बाद से Frameworkस्वायत्त है, Linkerइस मामले में, खोजने के लिए जिम्मेदार है और लिंक Dynamic Frameworkके अंदर प्रणाली लोडर पथ या खोजने के लिए और लिंक एक अंदर बंडल

Embeddingबाइनरी को लक्ष्य बाइनरी में कॉपी करने की एक प्रक्रिया है। परिणामस्वरूप यह अंदर स्थित होगा।

यहाँ और पढ़ें


-3

मेरी समझ में, एम्बेडेड बाइनरी में केवल गतिशील ढांचा शामिल है जो कि iOS 8 और इसके बाद के संस्करण पर उपलब्ध है, अन्यथा आप केवल उस ढांचे को लिंक कर सकते हैं जो स्थिर है।

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