आप निश्चित रूप से .xcscheme फ़ाइल के संबंध में सही ट्रैक पर हैं - मुझे अपनी परियोजनाएँ सेट करते समय यह समस्या दिखाई दी थी!
पोस्टरिटी के लिए, या कम से कम किसी को यहां खोज से प्राप्त करने के लिए, यहां दो चीजें हैं - "मैं व्यस्त हूं, इसलिए बस तथ्य कृपया" संस्करण और अधिक शामिल चर्चा और औचित्य। ये दोनों संस्करण मान लेते हैं कि आप कार्यक्षेत्र फ़ाइल से निर्माण करने का प्रयास कर रहे हैं; यदि आप मेरे माफीनामे नहीं हैं, तो यह ज्यादातर कार्यक्षेत्र-आधारित परियोजनाओं पर लागू होता है।
संघनित 'फिक्स-इट' संस्करण
मूल कारण यह है कि योजनाओं का डिफ़ॉल्ट व्यवहार योजनाओं को 'निजी' बनाए रखना है, जब तक कि उन्हें विशेष रूप से साझा नहीं किया जाता है। निर्माण शुरू की गई कमांड-लाइन के मामले में, Xcode UI कभी नहीं चलता है और xcoderun टूल के पास काम करने के लिए स्कीम्स का अपना कैश नहीं है। लक्ष्य उस योजना को जनरेट करना, साझा करना और प्रतिबद्ध करना है जिसे आप बांस चलाना चाहते हैं:
- कोड की एक साफ काम करने वाली कॉपी पर, अपने प्रोजेक्ट के कार्यक्षेत्र को खोलें।
- उत्पाद मेनू से योजना> योजनाएं प्रबंधित करें ... चुनें।
- परियोजना के लिए परिभाषित योजनाओं की सूची दिखाई देती है।
- योजना का पता लगाएं बांस चलाने की कोशिश कर रहा है
- सुनिश्चित करें कि 'साझा' बॉक्स उस योजना के लिए जाँच की गई है और 'कंटेनर' सेटिंग कार्यस्थान पर सेट की गई है, न कि परियोजना फ़ाइल।
- योजनाओं को प्रबंधित करने के लिए 'ओके' पर क्लिक करें।
- WorkspaceName.xcworkspace / xcsedendata / xcschemes पर आपकी परियोजना में एक नई .xcscheme फ़ाइल बनाई गई है।
- इस फाइल को अपनी रिपॉजिटरी के लिए प्रतिबद्ध करें और एक बांस बिल्ड बनाएं।
गहरा चर्चा और तर्क
Xcode 4 ने कार्यक्षेत्र और योजनाओं को कुछ अराजकता से निपटने में मदद करने के लिए एक तरीका के रूप में पेश किया, जो कि संबंधित Xcode परियोजनाओं के वायरिंग के मैकेनिक्स से निपटने, लक्ष्य बनाने और एक साथ कॉन्फ़िगरेशन का निर्माण करने के लिए अंतर्निहित है। कार्यक्षेत्र में स्वयं कॉन्फ़िगरेशन डेटा का एक सेट होता है, जिसमें डेटा के प्रत्येक छोटे 'बॉक्स' का वर्णन होता है, जिसमें .xcodeproj फाइलें और प्रत्येक डेवलपर मशीन या सीआई सिस्टम को मिरर किए जाने वाले साझा कॉन्फ़िगरेशन डेटा का एक सेट संलग्न करने के लिए एक कंकाल के रूप में कार्य करता है। । यह कार्यक्षेत्र की शक्ति और नुकसान दोनों है - 1) बहुत सारे तरीके हैं जिनसे कोई भी चीज़ों को 100% सही तरीके से कॉन्फ़िगर किया जा सकता है, लेकिन गलत कंटेनर में डाल दिया जाता है या 2) सही कंटेनर में डाल दिया जाता है, लेकिन अनुचित तरीके से कॉन्फ़िगर किया गया डेटा प्रदान करता है प्रणाली के अन्य भागों से दुर्गम!
Xcode 4 योजनाओं का डिफ़ॉल्ट व्यवहार नई योजनाओं को स्वचालित रूप से उत्पन्न करना है क्योंकि प्रोजेक्टस्पेस फ़ाइल में प्रोजेक्ट जोड़े जाते हैं। आप में से जिन्होंने कई .xcodeproj फाइलें जोड़ी हैं, उन्होंने देखा होगा कि आपकी स्कीम सूची जल्दी से अनियंत्रित हो जाती है, क्योंकि विशेष रूप से प्रोजेक्ट फाइलें जोड़ी जाती हैं, फिर हटा दी जाती हैं, और फिर उसी कार्यक्षेत्र में पढ़ी जाती हैं। सभी योजनाएँ, स्वतः-निर्मित या मैन्युअल रूप से बनाई गईं, डिफ़ॉल्ट रूप से 'निजी' योजनाएँ केवल वर्तमान उपयोगकर्ता के लिए दिखाई देती हैं, जब भी .xcuserdata फ़ाइलें प्रोजेक्ट के डेटा और कॉन्फ़िगरेशन के साथ प्रतिबद्ध होती हैं। यह उस क्रिप्टिक बिल्ड एरर का मूल कारण है, जो Xcodebuild से बांस की रिपोर्ट करता है - क्योंकि बैम्बू बिल्ड को कमांड लाइन के माध्यम से संचालित करता है न कि Xcode UI को, यह स्कीमों को स्वतः उत्पन्न होने का अवसर नहीं देता है और केवल उन पर निर्भर करता है कार्यक्षेत्र में ही परिभाषित हैं।
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild फाइल की तलाश में जाता है <'स्कीम' पैरामीटर वैल्यू> .xcscheme <'वर्कस्पेस' पैरामीटर वैल्यू> / xcsareddata / xcschemes पर मौजूद है।
स्पष्ट रूप से ऐसे तरीके हैं जिनमें बांस और कार्यक्षेत्र दोनों को कॉन्फ़िगर किया जा सकता है, इसलिए ध्यान रखें कि आपका अनूठा कॉन्फ़िगरेशन यहां प्रस्तुत किए गए 100% का मैप नहीं कर सकता है। मुख्य takeaways:
- कुछ स्वचालित कार्य Xcode UI जादुई रूप से ध्यान रखते हैं कि Xcodebuild CLI के माध्यम से उपलब्ध नहीं हैं।
- आप 'कंटेनर पदानुक्रम' में कई स्थानों पर स्कीम संलग्न कर सकते हैं और कॉन्फ़िगरेशन डेटा बना सकते हैं - सुनिश्चित करें कि आपके डेटा को सही कंटेनर (कार्यक्षेत्र, प्रोजेक्ट और / या लक्ष्य बनाएं) में हवाएं
- विचार करें कि कहां कंटेनर पदानुक्रम में xcodebuild उपकरण कॉन्फ़िगरेशन डेटा की तलाश में हो सकता है; यह देखना शुरू कर देगा कि एक महान संकेतक '-वर्कस्पेस' या '-प्रोजेक्ट' तर्कों के उपयोग पर आधारित है।
'साझा' बॉक्स पहले ही चेक हो चुका है ... अब क्या?
मुझे अपने बांस के उदाहरण पर इसी मुद्दे का सामना करना पड़ा; यह पता चला कि मेरी रिपॉजिटरी में प्रतिबद्ध योजना पुरानी थी और कमांड लाइन टूल्स का नवीनतम संस्करण इसे शान से नहीं संभाल रहा था। चूंकि यह पहले से मौजूद था, इसलिए मैंने इस योजना के बारे में कुछ भी स्पष्ट नहीं किया कि यह सुनिश्चित करने के लिए सेटिंग्स के माध्यम से एक नज़र डालें कि इस योजना को हटा दिया गया और फिर से बनाया गया, यह सुनिश्चित करते हुए कि मैंने इसे 'साझा' के रूप में चिह्नित किया है, और नई .xcschem फ़ाइल को पुनः प्राप्त कर रहा है। भंडार।
यदि सब कुछ अच्छा लगता है और पुनर्निर्माण नहीं करता है तो यह समस्या हल नहीं होती है, उस कंटेनर सेटिंग को दोबारा जांचें - उस योजना को पदानुक्रम में गलत कंटेनर से जोड़ना वास्तव में आसान है!