मैं एक कार्यक्षेत्र, Application.xcworkspace, कि दो चौखटे बनाता है और एक निष्पादन उन चौखटे का उपयोग करता है। यहाँ मोटे तौर पर है कि वे किस तरह से बाहर रखा जाता है:XCode फ्रेमवर्क संदर्भ पथ और बिल्ड आउटपुट निर्देशिका
Framework_1 - निर्मित और बदसूरत DerivedData पथ के लिए उत्पादन।
फ्रेमवर्क_2 - फ्रेमवर्क_1 पर निर्भर करता है, जो प्रोजेक्ट के फ्रेमवर्क क्षेत्र में शामिल है और "लाइब्रेरी के साथ लिंक बाइनरी" बिल्ड फेज में निर्दिष्ट है, और आउटपुट को बदसूरत डेरिवेटाटा पथ में निर्दिष्ट किया गया है।
आवेदन - फ्रेमवर्क_1 और फ्रेमवर्क_2 पर निर्भर करता है, जो परियोजना के फ्रेमवर्क क्षेत्र में शामिल हैं और "लाइब्रेरी के साथ लिंक बाइनरी" बिल्ड चरण में निर्दिष्ट हैं। आउटपुट निर्देशिका फिर से बदसूरत DerivedData पथ है।
कि संदर्भित चौखटे के लिए प्रोजेक्ट फाइल में पथ DerivedData बदसूरत पथ होते हैं - वे ../../Library/Developer/XCode/DerivedData/Application-longuglyuniquestring/ की तरह हैं निर्माण/उत्पाद/रिलीज/Framework_1.framework।
अगर मैं एक और निर्देशिका के लिए स्रोत की प्रतिलिपि, या संस्करण नियंत्रण में जाँच और एक अन्य मशीन के लिए चेक करें, तो उन ढांचे रास्तों अब वैध नहीं हैं। वे फिर से उत्पन्न हो जाते हैं। संदर्भित ढांचे परियोजना में लाल के रूप में दिखाई देते हैं।
- कार्यक्षेत्र का निर्माण - Framework_1 बनाता है:
अब तक, जब मैं किसी अन्य फ़ोल्डर में कार्यक्षेत्र का निर्माण करना चाहते, जिस तरह से मैं इस समस्या तय कर दी है के लिए है।
कि ढांचे के लिए "उत्पाद" नोड के लिए
- जाओ और खोजक में यह दिखा।
- नई बदसूरत पथ की प्रतिलिपि बनाएँ।
- फ्रेमवर्क_2 और एप्लिकेशन के लिए प्रोजेक्ट फ़ाइलों को खोलें और फ्रेमवर्क_1 और फ्रेमवर्क_2 के लिए पथ को सही करें।
- सभी लाल वस्तुओं सुलझाया जाना चाहिए और सब कुछ का निर्माण करना चाहिए।
यह प्रक्रिया कठिन है और मैं भाग्यशाली हूं कि प्रोजेक्ट फ़ाइल संपादित की जा सकती है। यह सहयोगियों कि थोड़ा मैं परियोजना फ़ाइलों के बारे में पता है समझ में नहीं आता, और सिर्फ कोड की जाँच और इसे बनाने के लिए चाहते हैं के लिए बुरा है।
क्या फ्रेमवर्क के लिए बिल्ड आउटपुट निर्देशिका में मुझे कुछ करने की ज़रूरत है? बदसूरत पथ की सिफारिश की जाने के बाद से मैं इसे बदलने की झुकाव कर रहा हूं। क्या कोई कॉपी फाइल विकल्प है जिसका उपयोग मैं उन कार्यक्षेत्रों को अपने कार्यक्षेत्र के सापेक्ष कुछ अनुमानित स्थान में रखने के लिए कर सकता हूं?
किसी भी मदद की सराहना की जाएगी। मुझे यकीन है कि मुझे कुछ आसान याद आ रहा है - यह कोई समझ नहीं आता है कि स्रोत नियंत्रण से कोड की जांच की गई है या किसी अन्य निर्देशिका में कॉपी की गई है, न केवल निर्माण करेगी।
के रूप में मैं एक '.dylib' और' .app' के साथ एक कार्यक्षेत्र है और वे दोनों एक ही फ़ोल्डर में डाल रहे हैं यही कारण है कि असामान्य है ('.../DerivedData /.../ निर्माण/उत्पाद/Debug')। मेरे पास '.app'' की प्रतिलिपि बनाने के लिए '.app' बिल्ड के हिस्से के रूप में '.app/संसाधन/फ्रेमवर्क' निर्देशिका में एक स्क्रिप्ट है। – trojanfoe
ऐप आउटपुट के साथ कोई समस्या नहीं - सभी आवश्यक ढांचे को ऐप/फ्रेमवर्क निर्देशिका में रखा जाता है। यह एक बिल्ड-टाइम समस्या है। "फ्रेम बाइनरी विद लाइब्रेरीज़" बिल्ड फेज में उपयोग किए गए फ्रेमवर्क बाइनरी, ऐप DerivedData निर्देशिका में हैं। जब परियोजना किसी भिन्न निर्देशिका से बनाई जाती है तो वह निर्देशिका बदल जाती है। सभी प्रोजेक्ट फाइल/स्रोत रूट के तहत एक निर्देशिका के अंतर्गत हैं। अगर मैं उन्हें दूसरी निर्देशिका में कॉपी करता हूं, तो परियोजना नहीं बनाई जाएगी क्योंकि लिंकिंग के लिए लाइब्रेरी पथ अलग होंगे। – GTAE86
यदि पुरानी निर्देशिका और नई निर्देशिका सहकर्मी हैं, तो समस्या को मुखौटा कर दिया जाएगा क्योंकि पुराने बाइनरी के सापेक्ष पथ अभी भी वैध होंगे। इसके परिणामस्वरूप संदर्भित फ्रेमवर्क में किए गए परिवर्तन ऐप में "दिखाए जा रहे" नहीं हैं क्योंकि यह अभी भी पुराने संस्करणों से जुड़ा हुआ है। समस्या को देखने का सबसे आसान तरीका है स्रोत को उस मशीन पर कॉपी करना जो वर्कस्पेस/परियोजनाओं के संबंध में साफ है। भले ही सबकुछ जगह पर है, तब तक यह तब तक नहीं बनाएगा जब तक ढांचे को जोड़ने के पथ सही नहीं होते हैं। – GTAE86