xcodebuild का कहना है कि इसमें स्कीम नहीं है


125

मेरे पास एक उत्सुक मुद्दा है।

मेरे पास एक प्रोजेक्ट है जो मैंने काम किया है और हमेशा एक्सकोड आईडीई से बनाया गया है, और यह ठीक काम किया है। अब मैं इस परियोजना के निर्माण के लिए बाँस की स्थापना कर रहा हूँ और जैसे मैं इसे कमांड लाइन से बना रहा हूँ।

मुद्दा यह है, अगर मैं अपने कोड को जीआईटी से बाहर की जाँच करता हूं और फिर इसे बनाने के लिए xcodebuild का उपयोग करता हूं तो यह कहता है कि योजना नहीं मिल सकती है, लेकिन अगर मैं परियोजना को खोलता हूं, तो यह बनाता है और अगर मैं इसे फिर से कमांड लाइन से बनाने की कोशिश करता हूं एक ही कमांड के साथ, यह काम करता है।

जब मैं प्रोजेक्ट खोल रहा हूं तो XCode क्या जादू कर रहा है या क्या मैं कुछ गूंगा कर रहा हूं, हो सकता है कि मेरे .gitignore में एक फ़ाइल को छोड़कर जो मुझे नहीं चाहिए?


बस मैंने देखा कि जब मैं xcode में प्रोजेक्ट खोलता हूं तो एक .xcscheme फ़ाइल बनाता है, लेकिन xcuserdata / username.xcuserdatad फ़ोल्डर में ... लेकिन मुझे नहीं पता कि यह योजना उपयोगकर्ताओं के नीचे 'उत्पन्न' क्यों होती है .. और मैं कैसे हूं कि बांस में संभाल करने के लिए जा रहा है
Zac टॉली

जवाबों:


187

आप निश्चित रूप से .xcscheme फ़ाइल के संबंध में सही ट्रैक पर हैं - मुझे अपनी परियोजनाएँ सेट करते समय यह समस्या दिखाई दी थी!

पोस्टरिटी के लिए, या कम से कम किसी को यहां खोज से प्राप्त करने के लिए, यहां दो चीजें हैं - "मैं व्यस्त हूं, इसलिए बस तथ्य कृपया" संस्करण और अधिक शामिल चर्चा और औचित्य। ये दोनों संस्करण मान लेते हैं कि आप कार्यक्षेत्र फ़ाइल से निर्माण करने का प्रयास कर रहे हैं; यदि आप मेरे माफीनामे नहीं हैं, तो यह ज्यादातर कार्यक्षेत्र-आधारित परियोजनाओं पर लागू होता है।

संघनित 'फिक्स-इट' संस्करण

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

  1. कोड की एक साफ काम करने वाली कॉपी पर, अपने प्रोजेक्ट के कार्यक्षेत्र को खोलें।
  2. उत्पाद मेनू से योजना> योजनाएं प्रबंधित करें ... चुनें।
  3. परियोजना के लिए परिभाषित योजनाओं की सूची दिखाई देती है।
  4. योजना का पता लगाएं बांस चलाने की कोशिश कर रहा है
  5. सुनिश्चित करें कि 'साझा' बॉक्स उस योजना के लिए जाँच की गई है और 'कंटेनर' सेटिंग कार्यस्थान पर सेट की गई है, न कि परियोजना फ़ाइल।
  6. योजनाओं को प्रबंधित करने के लिए 'ओके' पर क्लिक करें।
  7. WorkspaceName.xcworkspace / xcsedendata / xcschemes पर आपकी परियोजना में एक नई .xcscheme फ़ाइल बनाई गई है।
  8. इस फाइल को अपनी रिपॉजिटरी के लिए प्रतिबद्ध करें और एक बांस बिल्ड बनाएं।

गहरा चर्चा और तर्क

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:

  1. कुछ स्वचालित कार्य Xcode UI जादुई रूप से ध्यान रखते हैं कि Xcodebuild CLI के माध्यम से उपलब्ध नहीं हैं।
  2. आप 'कंटेनर पदानुक्रम' में कई स्थानों पर स्कीम संलग्न कर सकते हैं और कॉन्फ़िगरेशन डेटा बना सकते हैं - सुनिश्चित करें कि आपके डेटा को सही कंटेनर (कार्यक्षेत्र, प्रोजेक्ट और / या लक्ष्य बनाएं) में हवाएं
  3. विचार करें कि कहां कंटेनर पदानुक्रम में xcodebuild उपकरण कॉन्फ़िगरेशन डेटा की तलाश में हो सकता है; यह देखना शुरू कर देगा कि एक महान संकेतक '-वर्कस्पेस' या '-प्रोजेक्ट' तर्कों के उपयोग पर आधारित है।

'साझा' बॉक्स पहले ही चेक हो चुका है ... अब क्या?

मुझे अपने बांस के उदाहरण पर इसी मुद्दे का सामना करना पड़ा; यह पता चला कि मेरी रिपॉजिटरी में प्रतिबद्ध योजना पुरानी थी और कमांड लाइन टूल्स का नवीनतम संस्करण इसे शान से नहीं संभाल रहा था। चूंकि यह पहले से मौजूद था, इसलिए मैंने इस योजना के बारे में कुछ भी स्पष्ट नहीं किया कि यह सुनिश्चित करने के लिए सेटिंग्स के माध्यम से एक नज़र डालें कि इस योजना को हटा दिया गया और फिर से बनाया गया, यह सुनिश्चित करते हुए कि मैंने इसे 'साझा' के रूप में चिह्नित किया है, और नई .xcschem फ़ाइल को पुनः प्राप्त कर रहा है। भंडार।

यदि सब कुछ अच्छा लगता है और पुनर्निर्माण नहीं करता है तो यह समस्या हल नहीं होती है, उस कंटेनर सेटिंग को दोबारा जांचें - उस योजना को पदानुक्रम में गलत कंटेनर से जोड़ना वास्तव में आसान है!


यह वास्तव में मेरे लिए एक यादृच्छिक xcodebuild त्रुटि तय करता था जो NO त्रुटियों को वापस कर रहा था, लेकिन एक निकास कोड 65। कंटेनर को प्रोजेक्ट पर सेट किया गया था और कार्यक्षेत्र में ही नहीं, इसे बदल दिया और वॉइला, समस्या हल हो गई। धन्यवाद।
साइमन ली

धन्यवाद! यह ठीक वही है जिसे मैं ढूंढ रहा था।
छापा

मेरा टेस्ट और आर्काइव विकल्प अक्षम है, इस वजह से। मैंने जाँच की है कि मेरी योजना साझा है। अभी भी ब्रू बॉट का निर्माण करने में सक्षम नहीं है। मैं स्थानीय रूप से निर्माण करने में सक्षम हूं, लेकिन जैसा कि मैंने उल्लेख किया है कि मैं इसे संग्रहीत नहीं कर सकता। क्या आपको लगता है कि इस समस्या से संबंधित है
एलिक्स

धन्यवाद! अपने कार्यक्षेत्र में स्कीम कंटेनर सेट करना उन मुद्दों को तय करता है जो मैं अपनी टीमसिटी बिल्ड के साथ कर रहा था।
फॉर्म

इस संदेश से स्कीमा का पता कैसे लगाएं। मुझे यह संदेश बिल्कुल मिल रहा है। [xcodebuild: error: "jamesAppV2" नाम के कार्यक्षेत्र में "नाम" जैसी कोई योजना नहीं है। "-लिस्ट" विकल्प का उपयोग कार्यक्षेत्र में योजनाओं के नाम खोजने के लिए किया जा सकता है।]
कादिर हुसैन

52

इस तरह से समस्या को डीबग करें:

xcodebuild -list

या यदि आप एक कार्यक्षेत्र का उपयोग कर रहे हैं (जैसे फली के साथ)

xcodebuild -workspace MyProject.xcworkspace -list

यदि आप योजना को सूचीबद्ध नहीं किया गया है तो ठीक करें:

यहाँ छवि विवरण दर्ज करें


योजनाओं को साझा करने से उन्हें xcodebuild -list... धन्यवाद दिखाने की अनुमति मिलती है !
दान रोसेनस्टार्क

35

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

लेकिन विचार करने के लिए " क्या अगर " की एक संख्या है

  • क्या होगा यदि आप किसी कारण से सिर्फ Xcode प्रोजेक्ट को संशोधित नहीं कर सकते हैं?
  • यदि आप CI सर्वर पर स्वचालित रूप से एक नई योजना बनाते हैं तो क्या होगा?
    यह वास्तव में अक्सर होता है। यदि आप Calabash की तरह टेस्ट ऑटोमेशन फ्रेमवर्क का उपयोग करते हैं, तो आप आम तौर पर एक मौजूदा लक्ष्य को दोहराते हुए समाप्त हो जाएंगे, जो स्वचालित रूप से एक योजना को दोहराता है, और नई योजना साझा नहीं की जाती है, भले ही मूल योजना थी।

रूबी और xcodeproj मणि

मैं xcodeproj रूबी रत्न का उपयोग करने की सलाह दूंगा । यह वास्तव में अच्छा खुला स्रोत उपकरण है जो आपको Xcode- संबंधित कार्यों के टन को स्वचालित करने में मदद कर सकता है।

Btw, यह आपके Xcode प्रोजेक्ट्स और वर्कस्पेस के साथ गड़बड़ करने के लिए CocoaPods द्वारा उपयोग किया जाने वाला रत्न है ।

तो इसे स्थापित करें

sudo gem install xcodeproj

फिर सभी योजनाओं को फिर से साझा करने के लिए एक सरल रूबी स्क्रिप्ट लिखें, उस उद्देश्य के लिए मणि को फिर से तैयार किया गया है।

#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("MyProject.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save

यह सिर्फ स्कीम फ़ाइलों की प्रतिलिपि नहीं बनाता है उपयोगकर्ता के फ़ोल्डर को xcsareddata / xcschemes में बनाता है, यह pbxproj फ़ाइल को पार्स करके पहले उन फ़ाइलों को भी बनाता है ।


1
यदि कोई अन्य व्यक्ति इसके पार जाता है, तो ऐसा लगता है कि recreate_user_schemesपरीक्षण के लक्ष्यों को सही तरीके से नहीं संभाल रहा है। मैंने इसके बारे में एक बग रिपोर्ट दर्ज की है
मैट कंटर

मैंने इसके बारे में ब्लॉग किया। nsbogan.com/xcode/2014/05/29/share-xcode-schemes । दुर्भाग्य से यूनिट परीक्षणों के साथ समस्या अभी भी तय नहीं है।
14'14 को

ठीक है, मैं इस समाधान की कोशिश की। लेकिन जब मैं दौड़ता xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"हूं तो मुझे 'स्कीम <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> बनाने और संग्रह करने के लिए कहा जाता है, लेकिन रन डेस्टिनेशन <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> एक परिनियोजन प्लेटफ़ॉर्म नहीं है और इस क्रिया का कोई प्लेटफ़ॉर्म नहीं होना चाहिए अनुमति दी गई है '। लेकिन जब मैं XCode खोलता हूं तो सब ठीक
चलता

2
archiveकार्रवाई में हमेशा हस्ताक्षर शामिल होते हैं और गंतव्य को एक वास्तविक उपकरण पर सेट किया जाना चाहिए। आपके मामले में गंतव्य है iPad 2, जो मुझे लगता है कि सिम्युलेटर है, इसलिए कोई संग्रह संभव नहीं है। आपके आदेश से एक महत्वपूर्ण विकल्प गायब है, यह -sdk iphoneosकोशिश है कि पहले देखें और देखें कि यह कैसे जाता है। जब आप इसे Xcode IDE से चलाते हैं, तो आपके पास संभवतः गंतव्य सेट है iOS Deviceया हो सकता है कि आपके पास असली डिवाइस प्लग इन है, इसलिए यह एक गंतव्य के रूप में सेट है। यही कारण है कि संग्रह आईडीई से काम करता है। कमांड लाइन अधिक "गूंगा" है और कभी-कभी डिफ़ॉल्ट रूप से "गलत" विकल्पों का उपयोग कर सकता है, इसलिए आपको अधिक विशिष्ट होने की आवश्यकता है।
४-३० सी

1
यह अधिक उत्कीर्ण किया जाना चाहिए - धन्यवाद! स्विफ्ट फ्रेमवर्क वाले कैलाश प्रोजेक्ट्स XCode6.1.1 के साथ निर्माण करने में विफल रहते हैं क्योंकि आपको उन्हें एक योजना से बनाना होगा। यह मणि कमाल की है।
डेविड


3

स्कीम के लापता होने का एक सामान्य कारण कमिट्स को मूल में धकेलना है। यदि आपको एक लापता योजना संदेश मिलता है, तो आपको पहले सत्यापित करना चाहिए कि योजना साझा की गई है, फिर सत्यापित करें कि आपने परिवर्तन किए हैं और उन्हें मूल सर्वर पर धकेल दिया है।


1

सीआई को लागू करते समय मुझे यह त्रुटि हुई थी। ऊपर दिया गया प्रश्न मेरी समस्याओं के समान है, सिवाय इसके कि मैं गीतालाब के सीआई उपकरण का उपयोग कर रहा हूं। आप देख सकते हैं कि क्या बांस में ऐसी कोई फाइल है।
मैंने gitlab-ci.ymlफ़ाइल में कुछ बदलाव करके इसे हल किया ।
आपके schemeद्वारा साझा करने के बाद हवलदार ने आपका लाभ उठाया। Xcode में जाएं Products>Scheme>Manage Schemeऔर शेयर करने के लिए शेयर की जांच करें।

परिवर्तन

हर जगह निरपेक्ष पथ निर्धारित करें।
जैसे। xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
यहां आपको /path/to/your/project/अपने पथ और testDemoअपने प्रोजेक्ट नाम के साथ बदलने की आवश्यकता है ।


0

एक ही समस्या है, लेकिन मुख्य एक के उपप्रकार के रूप में xcode के साथ निर्माण के दौरान। बिल्ट स्टैंडअलोन में निर्मित सबप्रोजेक्ट - उसके बाद यह त्रुटि गायब हो गई।


0

मैंने इस मुद्दे का सामना किया और यहां तक ​​कि अगर कुछ जवाब यहां वास्तव में समाधान प्रदान करते हैं, तो मुझे यह बहुत स्पष्ट नहीं लगा। तो मैं सिर्फ एक और जोड़ूंगा। संक्षेप में, एक्सोडे से स्कीमा कैसे साझा करें।

नेविगेट करने के लिए Product> Scheme>Manage Schemes

यहाँ छवि विवरण दर्ज करें

फिर आपको प्रत्येक के साथ साझा की जाने वाली या नहीं बताई गई योजनाओं की एक सूची दिखाई जाएगी। बस उन लोगों की जांच करें जिन्हें आप साझा करना चाहते हैं (यह देव और प्रोडक्ट बिल्ड के लिए अलग हो सकता है)

यहाँ छवि विवरण दर्ज करें

इस लेख से ली गई छवियां https://developer.nevercode.io/docs/sharing-ios-project-schemes


0

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

यहाँ छवि विवरण दर्ज करें

, fastlane lanesअपनी सभी योजनाओं सहित अपनी सभी लेन को सही ढंग से प्रदर्शित करने के लिए:

यहाँ छवि विवरण दर्ज करें

, लेकिन fastlane gymकेवल मुख्य योजनाएं दिखाएं (देव और परीक्षण योजनाएं नहीं):

यहाँ छवि विवरण दर्ज करें

समाधान उन योजनाओं के लिए साझा विकल्प को अनचेक करने के लिए है, जो इसके द्वारा सूचीबद्ध नहीं हैं fastlane gymऔर फिर इसे फिर से जांचें । यह योजनाओं के लिए .xcscheme उत्पन्न करेगा:

यहाँ छवि विवरण दर्ज करें

अब, यदि आप के साथ जाँच fastlane gym, सभी योजनाओं को सूचीबद्ध किया जाएगा:

यहाँ छवि विवरण दर्ज करें

फिर आपको उन .xcshemes फ़ाइल को रिपॉजिटरी में भेजना चाहिए, इसलिए प्रोजेक्ट को क्लोन करने वाले अन्य डेवलपर को फाइलें मिलेंगी।


0

Xcode 11.4 के साथ किसी के लिए भी स्कीम पर "साझा" बटन खोजने की कोशिश कर रहा है, अब इसे व्यक्तिगत योजना में स्थानांतरित कर दिया गया है।

  1. मनचाही योजना का चयन करें
  2. प्रेस "संपादित करें"
  3. "साझा" बॉक्स की जाँच करें

स्कीम एडिट साझा किए गए बॉक्स को शामिल करता है

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