2012-07-23 21 views
34

मुझे एक दूसरे पर निर्भरताओं के साथ परियोजनाओं को व्यवस्थित करने के लिए एक्सकोड वर्कस्पेस के उपयोग को समझ में नहीं आता है। उदाहरण के लिए, मुझे लगता है कि बहुत सारे डेवलपर वर्कस्पेस संरचनाएं बनाते हैं जो इस तरह दिखते हैं:एक्सकोड वर्कस्पेस बनाम नेस्टेड प्रोजेक्ट्स

 
Workspace 
|-- App 
|-- A Common Library 
|-- Another Common Library 

इससे क्या लाभ मिलता है? यदि कोई भी "ऐप" प्रोजेक्ट खोलता है तो क्या वह वास्तव में ऐप बनाने में असमर्थ होगा? उन्हें यह महसूस करना होगा कि एक कार्यक्षेत्र आवश्यक निर्भरताओं के साथ मौजूद है।

यह बेहतर दृष्टिकोण की तरह मुझे लगता है इस तरह नेस्टेड परियोजनाओं का उपयोग करना है:

 
App 
|-- Libraries 
| |-- A Common Library 
| |-- Another Common Library 

तो कोई परियोजना मौजूद है कि नहीं बनाया जा सकता है। यह गिट के पनडुब्बियों के विचार के साथ भी अधिक लगता है।

एक वर्कस्पेस के लिए जो एकमात्र उपयोग मैं देखता हूं वह आम परियोजनाओं को समूहबद्ध करना है, जिसमें एक दूसरे पर निर्भरता नहीं है। मैं इस पर अन्य लोगों के विचार सुनना चाहता हूं क्योंकि मुझे कुछ याद आ रहा है।

+22

वाह!एक एक्सकोड टैग किए गए सवाल जो वास्तव में एक्सकोड के बारे में है! :) – Almo

+1

@ आल्मो: यह हर दो दिनों में होता है। वे आमतौर पर विपरीत समस्या रखते हैं, हालांकि: टैग किया गया [objc] जब यह लागू नहीं होता है। :) –

+1

वर्कस्पेस का उपयोग करने के कुछ कारणों का उल्लेख यहां दिया गया है: https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Workspace.html – pi3

उत्तर

17

जब मैं प्रोजेक्ट आजादी को बनाए रखने के दौरान परियोजनाओं को गठबंधन करना चाहता हूं तो मैं वर्कस्पेस का उपयोग करता हूं।

एक उदाहरण जहां मैं वर्कस्पेस का उपयोग करता हूं वह ट्यूटोरियल प्रोजेक्ट्स की श्रृंखला है जो बहुत सरल से अधिक जटिल तक प्रगति करता है। प्रत्येक प्रोजेक्ट एक स्टैंडअलोन प्रोजेक्ट के रूप में काम कर सकता है, लेकिन वर्कस्पेस में उन्हें एक साथ समूहित करने से समग्र परियोजना के मेरे संगठन में मदद मिलती है।

एक अन्य उदाहरण में मेरे पास एक ग्राहक के लिए एक ऐप विकसित किया गया है। ऐप समग्र परियोजना में एक स्टैंडअलोन ऐप और मॉड्यूल दोनों के रूप में काम करता है। स्वतंत्र परियोजना स्टैंडअलोन ऐप बना सकती है। दूसरा ऐप एक वर्कस्पेस का उपयोग करता है जिसमें दो परियोजनाएं शामिल हैं। ऐप का मॉड्यूल संस्करण एक विशेष योजना से बनाया गया है, और यह संयुक्त ऐप वर्कस्पेस का उपयोग किए बिना नहीं बना है।

उपर्युक्त स्थितियों के साथ एक मोड़ वह जगह है जहां बिल्ड फ़ोल्डर संग्रहीत किया जाता है। ट्यूटोरियल प्रोजेक्ट्स के समूह के लिए बिल्ड उत्पादों को अद्वितीय फ़ोल्डर्स में रखने के लिए मुझे एक्सकोड वरीयता बदलनी है, अन्य ऐप सेटअप के भीतर मॉड्यूल के लिए एक सामान्य बिल्ड फ़ोल्डर का उपयोग करें।

अन्य परिस्थितियों में मेरे पास एम्बेडेड परियोजनाओं के साथ बहुत सारी परियोजनाएं हैं। इन परिस्थितियों में पुस्तकालय परियोजनाएं स्थिर हैं। मैं पुस्तकालय परियोजनाओं के आगे के विकास का प्रयास नहीं करता हूं, इसलिए वे परियोजना के लिए एक और संसाधन हैं। मुझे काम करना आसान लगता है जहां परियोजना संसाधनों का मेरा फाइल सिस्टम संगठन कुछ हद तक मेरे एक्सकोड प्रोजेक्ट के संगठन को प्रतिबिंबित करता है। इसलिए इन पुस्तकालय परियोजनाओं को मुख्य परियोजना की फ़ाइल पदानुक्रम में कॉपी किया गया है। यदि मैं पुस्तकालयों का विकास कर रहा था और कई परियोजनाओं में उनका उपयोग कर रहा था तो वर्कस्पेस का उपयोग करना समझदारी होगी। गति के लिए मैं अक्सर परेशान नहीं करता।

कभी-कभी मैं एम्बेडेड परियोजनाओं वाली परियोजनाओं के साथ वर्कस्पेस को भी जोड़ता हूं।

तो मेरी राय यह है कि संगठनात्मक उपकरण, एम्बेडेड प्रोजेक्ट्स और वर्कस्पेस दोनों में उनकी योग्यता और समस्याएं हैं। मैं विशेष परिस्थितियों के आधार पर एक या दूसरे (या संयोजन) का उपयोग करना चुनता हूं।

+0

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

+0

हां, गिट सबमिड्यूल लाइब्रेरी विकास के प्रबंधन की एक वैकल्पिक (और संभवतः बेहतर) विधि है। सबमोड्यूल एक उन्नत गिट फीचर है, जो कई आईओएस डेवलपर अन्य संस्करण नियंत्रण प्रणालियों का उपयोग करने के लिए ज्ञान की कमी से विभिन्न कारणों से उपयोग नहीं कर सकते हैं। ऐसी स्थितियों में वर्कस्पेस एम्बेडेड परियोजनाओं की तुलना में बेहतर विकल्प हो सकता है। –

+0

@ श्री बर्न - माफ करना, लेकिन एक्सकोड के साथ गिट का उपयोग करना एक दर्द है ... आपके पास कोई भी संस्करण नहीं है जो आप प्रत्येक प्रोजेक्ट में किस संस्करण/शाखा/कांटा का उपयोग कर रहे हैं जब तक कि आप टर्मिनल का उपयोग करके हाथ से निर्देशिका द्वारा निर्देशिका नहीं जाते मैन्युअल रूप से नोट्स। – SpaceDog

1

हमने मुख्य परियोजना के फ्रेमवर्क में नेस्टेड परियोजनाओं को जोड़ा, ताकि हम उन्हें .framework उत्पाद में "शामिल" कर सकें।

Main 
|-- Main 
|-- MainTests 
|-- Frameworks 
| |-- CommonLibrary.xcodeproj 
| |-- AnotherCommonLibrary.xcodeproj 
| |-- UIKit.framework 
| |-- Foundation.framework 
| |-- CoreFoundation.framework 
|-- Products 

एक परियोजना के लिए यूनिवर्सल फ़्रेमवर्क जोड़ने के लिए this Great Tutorial by Jeff Verkoeyen देखें। यह आसान नहीं है, पहले, लेकिन इस पर काम करते रहें और आपको इसका लटका मिल जाएगा।

+0

क्या यह संरचना प्रत्येक एकल .xcodeproj पर कोकोपोड्स द्वारा संभव है? – user023