Xcode प्रोजेक्ट बनाम Xcode कार्यक्षेत्र - अंतर


401

मैं यह समझने की कोशिश कर रहा हूं कि पूरा पारिस्थितिकी तंत्र कैसे iOSकाम करता है।
अब तक, मुझे अपने अधिकांश प्रश्नों का उत्तर मिल सकता था (और मुझ पर भरोसा करें, उनमें से बहुत से हैं), लेकिन इस एक के लिए, अभी तक कोई स्पष्ट जवाब नहीं लगता है।

XcodeProject और XcodeWorkspace फ़ाइलों के बीच अंतर क्या है?

  1. उन दोनों में क्या अंतर है?
  2. वे किसके लिए जिम्मेदार हैं?
  3. जब मैं टीम में / अकेले अपने ऐप्स विकसित कर रहा हूं, तो मुझे उनमें से किसके साथ काम करना चाहिए?
  4. क्या इन दो फाइलों के मामले में मुझे कुछ और जानना चाहिए?

जवाबों:


606

मुझे लगता है कि परियोजना संरचना के बारे में आपको समझने के लिए तीन प्रमुख आइटम हैं: लक्ष्य , परियोजनाएं और कार्यक्षेत्रलक्ष्य एक उत्पाद / बाइनरी (यानी, एक एप्लिकेशन या लाइब्रेरी) कैसे बनाया जाता है, इसके बारे में विस्तार से बताएं। इनमें कंपाइलर और लिंकर फ्लैग जैसी बिल्ड सेटिंग्स शामिल हैं, और वे परिभाषित करते हैं कि कौन सी फाइलें (स्रोत कोड और संसाधन) वास्तव में एक उत्पाद से संबंधित हैं। जब आप निर्माण / रन करते हैं, तो आप हमेशा एक विशिष्ट लक्ष्य का चयन करते हैं।

यह संभावना है कि आपके पास कुछ लक्ष्य हैं जो कोड और संसाधनों को साझा करते हैं। ये अलग-अलग लक्ष्य ऐप (iPad / iPhone, अलग-अलग ब्रांडिंग, ...) के थोड़े अलग संस्करण हो सकते हैं या उन मामलों का परीक्षण कर सकते हैं जिन्हें स्वाभाविक रूप से ऐप के समान स्रोत फ़ाइलों तक पहुंचने की आवश्यकता होती है। इन सभी संबंधित लक्ष्यों को एक परियोजना में समूहीकृत किया जा सकता है । जबकि परियोजना में अपने सभी लक्ष्यों की फाइलें हैं, प्रत्येक लक्ष्य प्रासंगिक फाइलों का अपना सबसेट चुनता है। वही बिल्ड सेटिंग्स के लिए जाता है: आप प्रोजेक्ट में डिफ़ॉल्ट प्रोजेक्ट-वाइड सेटिंग्स को परिभाषित कर सकते हैं, लेकिन अगर आपके किसी लक्ष्य को अलग-अलग सेटिंग्स की आवश्यकता है, तो आप हमेशा उन्हें वहां ओवरराइड कर सकते हैं:

साझा परियोजना सेटिंग्स जो सभी लक्ष्यों को विरासत में देती हैं, जब तक कि वे इसे अधिलेखित न करें

साझा परियोजना सेटिंग्स जो सभी लक्ष्यों को विरासत में देती हैं, जब तक कि वे इसे ओवरराइड नहीं करते हैं

ठोस लक्ष्य सेटिंग्स: PSE iPhone प्रोजेक्ट के बेस SDK सेटिंग को ओवरराइट करता है

ठोस लक्ष्य सेटिंग: PSE iPhone प्रोजेक्ट की ओवरराइड करता हैBase SDK सेटिंग को

Xcode में, आप हमेशा प्रोजेक्ट (या कार्यस्थान, लेकिन लक्ष्य नहीं) खोलते हैं, और इसमें जो भी लक्ष्य होते हैं, उन्हें बनाया / चलाया जा सकता है, लेकिन प्रोजेक्ट बनाने का कोई तरीका / परिभाषा नहीं है, इसलिए प्रत्येक प्रोजेक्ट को कम से कम एक लक्ष्य की आवश्यकता होती है केवल फाइलों और सेटिंग्स के संग्रह से अधिक हो।

चलाने के लिए प्रोजेक्ट के किसी एक लक्ष्य का चयन करें

चलाने के लिए प्रोजेक्ट के किसी एक लक्ष्य का चयन करें

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

डेमो लिब एक उपप्रजाति है

demoLib एक है

यदि आप सुपर प्रोजेक्ट की निर्भरताओं में से एक सबप्रोजेक्ट के लक्ष्यों को जोड़ते हैं, तो सबप्रोजेक्ट स्वचालित रूप से तब तक बनाया जाएगा जब तक कि यह अपरिवर्तित न हो। यहां लाभ यह है कि आप अपनी परियोजना और अपनी निर्भरता दोनों से एक ही Xcode विंडो में फ़ाइलों को संपादित कर सकते हैं, और जब आप निर्माण / रन करते हैं, तो आप प्रोजेक्ट और उसके उपप्रोजेक्ट के लक्ष्यों से चयन कर सकते हैं:

सबप्रोजेक्ट से लक्ष्य चलाना

यदि, हालांकि, आपकी लाइब्रेरी (उपप्रोजेक्ट) का उपयोग कई अन्य परियोजनाओं (या उनके लक्ष्यों, सटीक होने के लिए) द्वारा किया जाता है, तो इसे समान पदानुक्रम स्तर पर रखने के लिए समझ में आता है - यही कार्यक्षेत्र के लिए है। कार्यस्थानों में परियोजनाएँ होती हैं और उनका प्रबंधन होता है, और इसमें शामिल सभी परियोजनाएँ सीधे (यानी, उनके उपप्रोजेक्ट नहीं) एक ही स्तर पर होती हैं और उनके लक्ष्य एक-दूसरे पर निर्भर हो सकते हैं (परियोजनाओं के लक्ष्य सबप्रोजेक्ट्स के लक्ष्यों पर निर्भर हो सकते हैं, लेकिन इसके विपरीत नहीं)।

कार्यक्षेत्र संरचना

कार्यक्षेत्र संरचना

इस उदाहरण में, दोनों एप्लिकेशन (अन्य एप्लायसेशन / प्रोजेक्टस्ट्रेक्चर.प्रदर्शन ) डेमोलिब प्रोजेक्ट के लक्ष्यों को संदर्भित कर सकते हैं। यह सबप्रोजेक्ट के रूप में दोनों अन्य परियोजनाओं में डेमोलिब परियोजना को शामिल करके भी संभव होगा (जो केवल एक संदर्भ है, इसलिए कोई दोहराव आवश्यक नहीं है), लेकिन यदि आपके पास बहुत सारी क्रॉस-निर्भरताएं हैं, तो कार्यक्षेत्र अधिक समझ में आता है। यदि आप एक कार्यक्षेत्र खोलते हैं, तो आप बिल्डिंग / रनिंग के दौरान सभी परियोजनाओं के लक्ष्य चुन सकते हैं।

कार्यक्षेत्र से लक्ष्य चलाना

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

संक्षेप में आपके प्रश्न :

1) प्रोजेक्ट्स में फ़ाइलें (कोड / रिज़ॉइसेस), सेटिंग्स और लक्ष्य होते हैं जो उन फ़ाइलों और सेटिंग्स से उत्पाद बनाते हैं। कार्यक्षेत्रों में परियोजनाएं होती हैं जो एक दूसरे को संदर्भित कर सकती हैं।

2) दोनों आपके समग्र प्रोजेक्ट की संरचना के लिए जिम्मेदार हैं, लेकिन विभिन्न स्तरों पर।

3) मुझे लगता है कि ज्यादातर मामलों में परियोजनाएं पर्याप्त हैं। जब तक कोई विशिष्ट कारण न हो तब तक कार्यस्थानों का उपयोग न करें। साथ ही, आप अपनी परियोजना को बाद में किसी कार्यक्षेत्र में एम्बेड कर सकते हैं।

4) मुझे लगता है कि उपरोक्त पाठ क्या है ...

3 के लिए एक टिप्पणी है): कोकोपोड्स , जो स्वचालित रूप से आपके लिए 3 पार्टी लाइब्रेरी को संभालता है, कार्यक्षेत्रों का उपयोग करता है। इसलिए, आपको उनका उपयोग करना होगा, भी, जब आप उपयोग करते हैं CocoaPods(जो बहुत सारे लोग करते हैं)।


7
क्या एक परियोजना दो अलग-अलग कार्यक्षेत्रों का हिस्सा हो सकती है? या अगर मैं एक परियोजना को दो अन्य लोगों के साथ साझा करना चाहता हूं तो क्या वे सभी एक ही कार्यक्षेत्र का हिस्सा होंगे?
जैक

8
बिलकुल, एक प्रोजेक्ट आपके जितने चाहें उतने कार्यक्षेत्रों का हिस्सा हो सकता है। किसी कार्यस्थान पर प्रोजेक्ट जोड़ना प्रोजेक्ट के बारे में कुछ भी नहीं बदलता है। तो आपके पास कई विकल्प हैं ... सभी एक कार्यक्षेत्र में, दो कार्यक्षेत्र जो एक परियोजना को साझा करते हैं, या दो परियोजनाएं हैं जिनके पास साझा परियोजना एक उपप्रोजेक्ट के रूप में है।
hagi

1
मुझे इसके साथ कोई अनुभव नहीं है, लेकिन README का कहना है: " आप अपनी परियोजना संरचना और सेटअप पर पूर्ण नियंत्रण बनाए रखते हैं ", और " [निर्भरता] को एक ही कार्यक्षेत्र में एकीकृत करने के बजाय, [...] में आपकी निर्भरताएं शामिल होनी चाहिए। उनका अपना Xcode प्रोजेक्ट "। संक्षेप में: यह आपकी परियोजनाओं / कार्यक्षेत्रों को बिल्कुल भी नहीं छूता है, इसलिए मैं यह नहीं देखता कि मुझे इसे उत्तर में कैसे शामिल करना चाहिए। यदि आप कार्टाजेज का उपयोग करते हैं, तो इसका उत्तर अभी भी मददगार है, खासकर जब आपको यह तय करना होगा कि आपको अपनी निर्भरता कैसे बढ़ानी है, लेकिन इनमें से कोई भी कार्थेज के लिए विशिष्ट नहीं है।
hagi

अच्छी तरह से परियोजना पदानुक्रम के बारे में बताया। यदि मैं उपप्रोजेक्ट को स्थान से हटा / स्थानांतरित कर दूं तो उपप्रोजेक्ट मुख्य परियोजना में रहेगा? stackoverflow.com/questions/40214505/…
गणेश गुटूरी

पैरेंट प्रोजेक्ट फ़ाइल में सबप्रोजेक्ट का संदर्भ होता है, कॉपी का नहीं। यदि सबप्रोजेक्ट को हटा दिया जाता है, तो अभिभावक इसे नहीं ढूंढ पाएंगे। आमतौर पर, आप फ़ाइल सिस्टम स्तर पर यह सुनिश्चित करना चाहते हैं कि मूल परियोजना की सभी उपप्रोजेक्ट की स्थानीय प्रतियां हैं। कोकोपोड्स या कार्थेज जैसे डिपेंडेंसी मैनेजर आपके लिए काम करेंगे, या आप गिट सबमॉड्यूल का उपयोग कर सकते हैं।
Hagi

102

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


34

संक्षेप में

  • Xcode 3 ने सबप्रोजेक्ट प्रस्तुत किया, जो कि माता-पिता के बच्चे का संबंध है, जिसका अर्थ है कि माता-पिता अपने बच्चे के लक्ष्य का संदर्भ दे सकते हैं, लेकिन इसके विपरीत नहीं
  • Xcode 4 ने कार्यक्षेत्र की शुरुआत की, जो कि रिश्ते को प्रभावित कर रहा है, जिसका अर्थ है कि कोई भी परियोजना एक ही कार्यक्षेत्र में परियोजनाओं को संदर्भित कर सकती है

2

जब मैंने iOS प्रोजेक्ट्स को विकसित करने के लिए CocoaPods का उपयोग किया, तो एक .xcworkspaceफाइल है, आपको .xcworkspaceCocoaPods के साथ संबंधित फाइल के साथ प्रोजेक्ट को खोलने की आवश्यकता है ।

फ़ाइलें पूर्वावलोकन

लेकिन जब आप फ़ाइल के Show Package Contentsसाथ .xcworkspaceहोंगे, तो आपको contents.xcworkspacedataफ़ाइल मिल जाएगी ।

पैकेज सामग्री

<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:BluetoothColorLamp24G.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>

इस लाइन पर ध्यान दें:

location = "group:BluetoothColorLamp24G.xcodeproj"

.xcworkspaceफ़ाइल के साथ संदर्भ में है .xcodeprojफ़ाइल।

विकास पर्यावरण:

macOS 10.14
Xcode 10.1

2
  1. उन दोनों में क्या अंतर है?
    कार्यक्षेत्र परियोजनाओं का एक समूह है

  2. वे किसके लिए जिम्मेदार हैं?
    प्रोजेक्ट सोर्स कोड के लिए जिम्मेदार है। कार्यक्षेत्र परियोजनाओं के बीच निर्भरता के लिए जिम्मेदार है

  3. जब मैं टीम में / अकेले अपने ऐप्स विकसित कर रहा हूं, तो मुझे उनमें से किसके साथ काम करना चाहिए?
    आपकी पसंद आपके प्रोजेक्ट के एक प्रकार पर निर्भर करती है। उदाहरण के लिए यदि आपका प्रोजेक्ट कोकोआपोड्स निर्भरता प्रबंधक पर निर्भर करता है तो यह एक कार्यक्षेत्र बनाता है।

  4. क्या इन दो फाइलों के मामले में मुझे कुछ और जानना चाहिए?
    कार्यक्षेत्र का एक प्रतियोगी है cross-project references[के बारे में]

[Xcode घटक]

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