मुझे लगता है कि परियोजना संरचना के बारे में आपको समझने के लिए तीन प्रमुख आइटम हैं: लक्ष्य , परियोजनाएं और कार्यक्षेत्र । लक्ष्य एक उत्पाद / बाइनरी (यानी, एक एप्लिकेशन या लाइब्रेरी) कैसे बनाया जाता है, इसके बारे में विस्तार से बताएं। इनमें कंपाइलर और लिंकर फ्लैग जैसी बिल्ड सेटिंग्स शामिल हैं, और वे परिभाषित करते हैं कि कौन सी फाइलें (स्रोत कोड और संसाधन) वास्तव में एक उत्पाद से संबंधित हैं। जब आप निर्माण / रन करते हैं, तो आप हमेशा एक विशिष्ट लक्ष्य का चयन करते हैं।
यह संभावना है कि आपके पास कुछ लक्ष्य हैं जो कोड और संसाधनों को साझा करते हैं। ये अलग-अलग लक्ष्य ऐप (iPad / iPhone, अलग-अलग ब्रांडिंग, ...) के थोड़े अलग संस्करण हो सकते हैं या उन मामलों का परीक्षण कर सकते हैं जिन्हें स्वाभाविक रूप से ऐप के समान स्रोत फ़ाइलों तक पहुंचने की आवश्यकता होती है। इन सभी संबंधित लक्ष्यों को एक परियोजना में समूहीकृत किया जा सकता है । जबकि परियोजना में अपने सभी लक्ष्यों की फाइलें हैं, प्रत्येक लक्ष्य प्रासंगिक फाइलों का अपना सबसेट चुनता है। वही बिल्ड सेटिंग्स के लिए जाता है: आप प्रोजेक्ट में डिफ़ॉल्ट प्रोजेक्ट-वाइड सेटिंग्स को परिभाषित कर सकते हैं, लेकिन अगर आपके किसी लक्ष्य को अलग-अलग सेटिंग्स की आवश्यकता है, तो आप हमेशा उन्हें वहां ओवरराइड कर सकते हैं:
साझा परियोजना सेटिंग्स जो सभी लक्ष्यों को विरासत में देती हैं, जब तक कि वे इसे ओवरराइड नहीं करते हैं
ठोस लक्ष्य सेटिंग: PSE iPhone प्रोजेक्ट की ओवरराइड करता हैBase SDK
सेटिंग को
Xcode में, आप हमेशा प्रोजेक्ट (या कार्यस्थान, लेकिन लक्ष्य नहीं) खोलते हैं, और इसमें जो भी लक्ष्य होते हैं, उन्हें बनाया / चलाया जा सकता है, लेकिन प्रोजेक्ट बनाने का कोई तरीका / परिभाषा नहीं है, इसलिए प्रत्येक प्रोजेक्ट को कम से कम एक लक्ष्य की आवश्यकता होती है केवल फाइलों और सेटिंग्स के संग्रह से अधिक हो।
चलाने के लिए प्रोजेक्ट के किसी एक लक्ष्य का चयन करें
बहुत सारे मामलों में, परियोजनाएं आप सभी की जरूरत हैं। यदि आपके पास एक निर्भरता है जो आप स्रोत से बनाते हैं, तो आप इसे एक सबप्रोजेक्ट के रूप में एम्बेड कर सकते हैं । उपप्रोजेक्ट अलग से या उनके सुपर प्रोजेक्ट के भीतर खोले जा सकते हैं।
demoLib एक है
यदि आप सुपर प्रोजेक्ट की निर्भरताओं में से एक सबप्रोजेक्ट के लक्ष्यों को जोड़ते हैं, तो सबप्रोजेक्ट स्वचालित रूप से तब तक बनाया जाएगा जब तक कि यह अपरिवर्तित न हो। यहां लाभ यह है कि आप अपनी परियोजना और अपनी निर्भरता दोनों से एक ही Xcode विंडो में फ़ाइलों को संपादित कर सकते हैं, और जब आप निर्माण / रन करते हैं, तो आप प्रोजेक्ट और उसके उपप्रोजेक्ट के लक्ष्यों से चयन कर सकते हैं:
यदि, हालांकि, आपकी लाइब्रेरी (उपप्रोजेक्ट) का उपयोग कई अन्य परियोजनाओं (या उनके लक्ष्यों, सटीक होने के लिए) द्वारा किया जाता है, तो इसे समान पदानुक्रम स्तर पर रखने के लिए समझ में आता है - यही कार्यक्षेत्र के लिए है। कार्यस्थानों में परियोजनाएँ होती हैं और उनका प्रबंधन होता है, और इसमें शामिल सभी परियोजनाएँ सीधे (यानी, उनके उपप्रोजेक्ट नहीं) एक ही स्तर पर होती हैं और उनके लक्ष्य एक-दूसरे पर निर्भर हो सकते हैं (परियोजनाओं के लक्ष्य सबप्रोजेक्ट्स के लक्ष्यों पर निर्भर हो सकते हैं, लेकिन इसके विपरीत नहीं)।
कार्यक्षेत्र संरचना
इस उदाहरण में, दोनों एप्लिकेशन (अन्य एप्लायसेशन / प्रोजेक्टस्ट्रेक्चर.प्रदर्शन ) डेमोलिब प्रोजेक्ट के लक्ष्यों को संदर्भित कर सकते हैं। यह सबप्रोजेक्ट के रूप में दोनों अन्य परियोजनाओं में डेमोलिब परियोजना को शामिल करके भी संभव होगा (जो केवल एक संदर्भ है, इसलिए कोई दोहराव आवश्यक नहीं है), लेकिन यदि आपके पास बहुत सारी क्रॉस-निर्भरताएं हैं, तो कार्यक्षेत्र अधिक समझ में आता है। यदि आप एक कार्यक्षेत्र खोलते हैं, तो आप बिल्डिंग / रनिंग के दौरान सभी परियोजनाओं के लक्ष्य चुन सकते हैं।
आप अभी भी अपनी प्रोजेक्ट फ़ाइलों को अलग से खोल सकते हैं, लेकिन यह संभावना है कि उनके लक्ष्य नहीं बनेंगे क्योंकि Xcode निर्भरता को हल नहीं कर सकता जब तक कि आप कार्यक्षेत्र फ़ाइल नहीं खोलते। कार्यक्षेत्र आपको सबप्रोजेक्ट के समान लाभ देते हैं: एक बार एक निर्भरता में बदलाव होने पर, Xcode इसे फिर से बनाएगा, यह सुनिश्चित करने के लिए कि यह अप-टू-डेट है (हालांकि मेरे पास इसके साथ कुछ समस्याएँ हैं, यह मज़बूती से काम नहीं करता है)।
संक्षेप में आपके प्रश्न :
1) प्रोजेक्ट्स में फ़ाइलें (कोड / रिज़ॉइसेस), सेटिंग्स और लक्ष्य होते हैं जो उन फ़ाइलों और सेटिंग्स से उत्पाद बनाते हैं। कार्यक्षेत्रों में परियोजनाएं होती हैं जो एक दूसरे को संदर्भित कर सकती हैं।
2) दोनों आपके समग्र प्रोजेक्ट की संरचना के लिए जिम्मेदार हैं, लेकिन विभिन्न स्तरों पर।
3) मुझे लगता है कि ज्यादातर मामलों में परियोजनाएं पर्याप्त हैं। जब तक कोई विशिष्ट कारण न हो तब तक कार्यस्थानों का उपयोग न करें। साथ ही, आप अपनी परियोजना को बाद में किसी कार्यक्षेत्र में एम्बेड कर सकते हैं।
4) मुझे लगता है कि उपरोक्त पाठ क्या है ...
3 के लिए एक टिप्पणी है): कोकोपोड्स , जो स्वचालित रूप से आपके लिए 3 पार्टी लाइब्रेरी को संभालता है, कार्यक्षेत्रों का उपयोग करता है। इसलिए, आपको उनका उपयोग करना होगा, भी, जब आप उपयोग करते हैं CocoaPods
(जो बहुत सारे लोग करते हैं)।