छाता ढांचे केवल तभी समझ में आते हैं जब आप सभी शामिल ढांचे का एकमात्र वितरक हैं, और आप एक ही संस्करण वाले पैकेज के रूप में सभी ढांचे को पैकेजिंग करेंगे जो एक साथ अपग्रेड किए जाएंगे। यदि यह आपकी स्थिति है, तो यह ठीक है, लेकिन यह एक बहुत असामान्य स्थिति है। कोको विकास दुनिया में, यह किसी के लिए बेहद असामान्य है लेकिन ऐप्पल इस स्थिति में होना चाहिए।
पहली बात पर, छाता ढांचे केवल तभी समझ में आते हैं जब आप दिए गए ढांचे का एकमात्र वितरक हैं। उदाहरण के लिए, कहें कि आप अपने छतरी ढांचे के हिस्से के रूप में libcurl शामिल करना चाहते थे। अब कुछ अन्य पैकर भी अपने छतरी ढांचे के हिस्से के रूप में libcurl शामिल करना चाहता है। अब हमारे पास एक लिंक-टाइम टक्कर है जो या तो लिंक त्रुटियों या बदतर, अपरिभाषित रनटाइम व्यवहार का कारण बन सकती है। मैंने इन्हें खुद का पीछा किया है। वे बेहद अप्रिय हैं। इससे बचने का एकमात्र तरीका प्रत्येक ढांचे/पुस्तकालय का केवल एक संस्करण होना है। छाता ढांचे विपरीत को प्रोत्साहित करते हैं।
भले ही आप अपने स्वयं के कोड को उप-टुकड़ों में तोड़ रहे हों, इसका मतलब है कि अन्य विक्रेता आपके उप-ढांचे का उपयोग अपने स्वयं के छतरी ढांचे में कर सकते हैं, जिससे एक ही समस्या हो सकती है। याद रखें, अगर आप कहते हैं कि छतरी ढांचे का उपयोग करने के लिए तीसरे पक्ष के रूप में आपके लिए यह ठीक है, तो यह अन्य विक्रेताओं के लिए भी ठीक है।
दूसरे बिंदु पर, छतरी ढांचे केवल तभी समझ में आते हैं जब आप सभी उप-ढांचे के संस्करण को नियंत्रित करते हैं। ढांचे के एक अंतर-निर्भर सेट के एक टुकड़े को पैच करने की कोशिश करना लगभग हमेशा मेरे अनुभव में एक आपदा है।
ओएस विक्रेता के पास उनके सिस्टम के आकार और सर्वव्यापीता के कारण असामान्य स्थिति है। चीजें जो एक पैमाने पर समझ में आती हैं अक्सर दूसरे पर समझ में नहीं आती हैं। NSResponder इसके बारे में पूरी तरह से सही है। व्यापार-बंद अलग-अलग होते हैं जब आप एक पूर्ण, बहु-हजार पैकेज वातावरण प्रदान कर रहे हैं जो मंच के लिए लिखे गए प्रत्येक कार्यक्रम का आधार है। लेकिन यहां तक कि ऐप्पल में केवल कुछ हद तक बड़े छतरी ढांचे हैं, और वे हमेशा पुस्तकालयों के चारों ओर रैपर होते हैं जो वे संस्करण प्रदान करते हैं और नियंत्रित करते हैं। यह ज्यादातर डेवलपर्स के काम को सरल बनाने के लिए है जो अन्यथा संकलन करने के लिए कुछ हासिल करने के लिए दर्जनों पुस्तकालयों और ढांचे का पीछा करना होगा। किसी तीसरे पक्ष की स्थिति नहीं है, और इसलिए यह बहुत दुर्लभ है कि किसी तीसरे पक्ष को इस समाधान की आवश्यकता है। अपने ग्राहक से दो पुस्तकालयों को जोड़ने के लिए पूछना पूरी तरह से अलग है, तो उन्हें 20 लिंक करने के लिए कहें। यदि आप 20 ढांचे प्रदान कर रहे हैं जो सभी एक साथ काम करते हैं और आप नियंत्रण करते हैं, तो शायद आपको छतरी का उपयोग करना चाहिए, लेकिन शायद आपके पास बहुत सारे ढांचे हैं तृतीय पक्ष।
मेरी अधिकांश चर्चा ओएस एक्स के मामले में है। आईओएस पर यह तीसरे पक्ष के लिए एक गैर-मुद्दा है। स्थिर पुस्तकालयों को टकराव के कारण अन्य स्थैतिक पुस्तकालयों को कभी भी लिंक नहीं करना चाहिए जो निश्चित रूप से घटित होंगे।
सिद्धांत रूप में, मैंने जिन मुद्दों पर चर्चा की है, वे यहां लिंकर की मौलिक तकनीकी सीमाएं हैं। लिंकर के पुस्तकालयों के कई संस्करणों को प्रबंधित करने का कोई अच्छा तरीका नहीं है और इसलिए टकराव एक गंभीर समस्या है। .NET असेंबली इस के आसपास अधिक लचीलापन प्रदान करने का प्रयास करें। मैं .NET विकास के साथ पर्याप्त परिचित नहीं हूं कि यह सफल रहा है या नहीं। बड़े बहु-घटक प्रणालियों के साथ मेरा अनुभव यह है कि अधिकांश समस्याओं के लिए सरल, कम लचीला समाधान सर्वोत्तम होते हैं। (लेकिन फिर, घास हमेशा हिरण है ....)
मैं भी यह जानना चाहता हूं। गिट रिपोजिटरी के साथ स्वचालित निर्माण की स्थापना, आश्रित परियोजनाओं में सिम्लिंक, ढांचे/हेडर खोज पथ और सभी मजेदार चीजें ढांचे और परियोजनाओं की संख्या बढ़ने पर बहुत मज़ेदार हो सकती हैं। – Minthos
आप सबूत के बिना मान रहे हैं कि छाता ढांचे * * * "ऐप्पल की समस्या के लिए एक अच्छा समाधान है"। मेरी अनौपचारिक राय यह है कि विपरीत सत्य है: पुराना ओएसएक्स, या पुराने संस्करणों के लिए ओएसएक्स के नए संस्करणों की तुलना में आईओएस की तुलना में, मुझे ढांचे के कोरग्राफिक्स चलने * आउट * जैसे स्टैंडवर्कल फ्रेमवर्क में ढांचे दिखाई देते हैं। मुझे लगता है कि "छाता" का विचार कोको के बढ़ते दर्द को कम करने के लिए एक अच्छा झुकाव था, लेकिन कभी भी "ऐप्पल की समस्या के लिए अच्छा समाधान" नहीं था; और शायद वे आपको एक ही गड़बड़ में पकड़े जाने से दूर चेतावनी दे रहे हैं। – Quuxplusone
मैं इस सवाल को ऑफ-विषय के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह विषय बहुत पुराना है। वर्तमान में, आईओएस एसडीके 8.0 और ऊपर, गतिशील ढांचे, और त्वरित वाक्यविन्यास प्रदान करते हैं। तो, यह सवाल अब उपयोगी नहीं है। – AechoLiu