Xcode 8 हर बार पूर्ण कोड को पुन: जमा कर रहा है


131

कोड में किसी भी परिवर्तन के साथ (हालाँकि फ़ाइल .pch में नहीं है), हर बार पूरा प्रोजेक्ट recompiles।


31
यह नीचे क्यों है ?! यह एक कानूनी मुद्दा है। हर बार संकलित करने के लिए 4 मिनट लगते हैं, सभी टीम उत्पादकता को nuked करते हैं।
जोश

1
मुझे भी यह मुद्दा आता है।
एजे

3
क्या आप कुछ IBDesignable सामान के साथ xib / स्टोरीबोर्ड को संशोधित कर रहे हैं?
लार्मे

1
संबंधित ऐप्पल फोरम थ्रेड: forum.developer.apple.com/thread/62737 । अभी भी कोई हल नहीं।
ldiqual

1
बग रिपोर्ट खोलना सुनिश्चित करें, जैसा कि Apple फ़ोरम में सुझाया गया है।
लियो नटन

जवाबों:


34

अपडेट 2017/1/2

इस समस्या को Xcode 8.2.1 पर हल नहीं किया गया है (मेरी परियोजना के लिए)

कैसे जीवित रहे?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

अपडेट 2016/12/17

इस समस्या को Xcode 8.2 पर हल नहीं किया गया है।

अद्यतन 2016/12/12

एटम टू कोड और कमांड लाइन का निर्माण और डिबग करना अब मेरी पसंद है। आशा है कि Apple इस वैध बग को जल्द ही ठीक कर देगा।

अपडेट 2016/12/04

यह समस्या Xcode 8.2 (बीटा 2) के साथ हल हो गई है

लेकिन मेरे लिए इसका समाधान नहीं किया गया है, मैं इस मुद्दे का सामना भी करता हूं जब मैं एक्सकोड 8.2 का उपयोग करता हूं। आप इसे आज़मा सकते हैं ( यहाँ Xcode8.2 Beta2 डाउनलोड करें )

बिल्ड सिस्टम • Xcode पूरे लक्ष्य का पुनर्निर्माण नहीं करेगा जब केवल छोटे परिवर्तन हुए हैं। (28892475)


पुराना उत्तर: यह एक काम है:

यहाँ छवि विवरण दर्ज करें "बिल्ड सेटिंग" टैब -> "सी भाषा बोली" -> इसे "कंपाइलर डिफ़ॉल्ट" में बदलें।

संदर्भ के लिए :

"सी भाषा बोली" को "कंपाइलर डिफ़ॉल्ट" के बजाय "GNU99" पर सेट किया गया था। पहले मानक GNU99 था, लेकिन अब यह नहीं है। कुछ बिंदु पर Xcode ने लाइब्रेरी प्रोजेक्ट सेटिंग्स को सही तरीके से माइग्रेट नहीं किया और इसलिए इसे GNU99 में सेट कर दिया गया। एक बार जब मैंने इसे GNU99 में बदल दिया तो इसने हर बार अपने सभी कोड को फिर से जमा करना बंद कर दिया!


1
अब तक सब ठीक है!!! अगर यह रहता है तो मुझे एक घंटा और बाउंटी को दे दो।
एडम वेट

7
Argh यह सब कुछ recompiling करने के लिए वापस आ गया है
एडम Waite

1
मेरा भी यही व्यवहार है। यदि मैं व्युत्पन्न डेटा (या C भाषा बोली को बदलता हूं) को साफ करता हूं तो यह लगभग 10 बिल्ड के लिए काम करेगा। इसके बाद यह सब कुछ पुनर्निर्माण करने के लिए वापस गिर जाता है।
2

1
Xcode 8.2 (बीटा 2) 10 बिल्ड के लिए काम करता है फिर खरोंच से सब कुछ फिर से बनाता है, लेकिन फिर भी पिछले एक की तुलना में बेहतर है।
मार्कस

3
दुर्भाग्य से यह समस्या Xcode 8.3 बीटा 2 (कम से कम हमारे लिए) में बनी हुई है। हमारी परियोजना में कोई ध्यान देने योग्य सुधार नहीं किया जा सकता है।
कैस्पर मुनक

20

उत्पाद पर जाएँ -> योजना -> योजना संपादित करें। लेफ्ट साइड कॉलम में बिल्ड चुनें और अनचाहे आश्रितों का पता लगाएं "

लेकिन इस झंडे की जाँच तब की जानी चाहिए जब आप पहली बार इस परियोजना का निर्माण कर रहे हों।


@ जोश, क्या आप अपनी परियोजना के भीतर कई परियोजनाओं का उपयोग कर रहे हैं (जैसे। सबप्रोजेक्ट या शामिल)। और क्या आप अपने निर्माण के उत्पादन को देखकर सुनिश्चित हैं कि यह वास्तव में सब कुछ पुनर्निर्माण कर रहा है?
मोबाइल बेन

3
कोकोपोड्स और मुख्य परियोजना के साथ इसका एक मूल कार्यक्षेत्र है। कोकोपोड्स बने हुए हैं, लेकिन मुख्य परियोजना हर फ़ाइल का पुनर्निर्माण करती है; बिल्ड आउटपुट और इसके निश्चित रूप से सभी 100+ फ़ाइलों के पुनर्निर्माण को देखते हुए।
जोश

1
अद्यतन: ऐसा लगता है कि यह समाधान ऐसा करने के बाद कुछ बिल्ड के लिए काम करता है, हालांकि ऐसा पूरे प्रोजेक्ट की सफाई और पुनर्निर्माण करता है। 2-8 वीं बार पुनर्निर्माण से, यह फिर से सब कुछ फिर से शुरू करता है। कोई विचार? निराशा से परे।
जोश

यह काम नहीं करता है, कम से कम एक कोकोआपोड्स कार्यक्षेत्र के साथ नहीं। सब कुछ, हर बार बनाता है। सुपर परेशान, खासकर जब से Apple को इस मुद्दे को ठीक करने के लिए वर्षों से है।
Womble

7

मेरे लिए फिक्स सिर्फ स्टोरीबोर्ड को बंद करना था, मेरे पास स्रोत फाइल थी जो असिस्टेड एडिटर के साथ खोली गई थी और स्टोरीबोर्ड फाइल को भी खोला गया था (स्टोरीबोर्ड को बंद करते हुए --- चूंकि मैं इसमें कोई बदलाव नहीं कर रहा था) सभी अनावश्यक संकलन हटा दिए गए


1
हा यह इतना आसान हो सकता है :)
manmal

5

UPDATED

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

अब मैं तेजी से वृद्धिशील डिबग बिल्ड के लिए एकल फ़ाइल संकलन विधि का उपयोग करता हूं ।

इस लिंक में कुछ अन्य अच्छे सुझाव हैं जिनमें कोड रिफैक्टिंग, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5 शामिल हैं

पुराना

अभी भी मेरे लिए Xcode 9 के साथ एक निरंतर समस्या रही है। आप में से कई की तरह मैं एक बड़ी स्विफ्ट 4 / कोकोपॉड्स प्रोजेक्ट पर कई स्रोत फाइलों के साथ काम कर रहा हूं और हर बार हर फाइल को फिर से संकलित कर रहा है।

अब तक मुझे निम्नलिखित सेटिंग्स के साथ सबसे अच्छे परिणाम मिल रहे हैं। मेरा सुझाव है कि आप इसे आजमाएं और देखें कि यह आपके लिए कैसे काम करता है।

  • स्कीमा -> बिल्ड -> "इंप्लिमेंट डिपेंडेंसी ढूंढें" = TRUE
  • बिल्ड सेटिंग्स -> लिंक-टाइम ऑप्टिमाइज़ेशन = इंक्रीमेंटल
  • बिल्ड सेटिंग्स -> अनुकूलन स्तर (डिबग) = कोई नहीं [-OO]
  • बिल्ड सेटिंग्स -> ऑप्टिमाइज़ेशन लेवल (रिलीज़) = सबसे तेज़, सबसे छोटा [-O]
  • बिल्ड सेटिंग्स -> बढ़े हुए हेडर की हाँ बढ़ाना = हाँ
  • बिल्ड सेटिंग्स -> इंक्रीमेंटल डिस्टिल सक्षम करें = हाँ

जोड़ा गया कस्टम उपयोगकर्ता-निर्धारित बिल्ड सेटिंग्स,

  • बिल्ड सेटिंग्स -> HEADERMAP_USERS_VFS = YES

नोट: मेरे पास पूरे मॉड्यूल अनुकूलन के लिए कस्टम उपयोगकर्ता-निर्धारित सेटिंग नहीं है।


3

मैंने उपसर्ग हेडर के बारे में अपने कोड के साथ कुछ चीजें बदल दी हैं जो लगता है कि इस समस्या को ठीक कर दिया है। मुझे नहीं पता कि वास्तव में किसने किया था, लेकिन मैं उन सभी को इस उम्मीद में साझा करूंगा कि यह किसी और को वहां से बाहर निकालने में मदद करे। यदि आपके पास कोई उपसर्ग हेडर सेट नहीं है, तो मुझे लगता है कि यह समस्या नहीं है (या समस्या बहुक्रियाशील है)।

  1. किसी भी उपसर्ग शीर्ष लेख से कोई आयात निकालें जो निर्मित उत्पाद निर्देशिका से फ़ाइलें हैं ताकि आप इसके लिए बिल्ड सेटिंग को बदल सकें ("Precompiled Header उपयोग फ़ाइलें से बिल्ड निर्देशिका के लिए") "नहीं"। सुनिश्चित करें कि यह अप्रत्यक्ष रूप से अन्य आयातों के माध्यम से भी आयात नहीं किया गया है।
  2. उन उपसर्ग शीर्ष लेखों से कोई भी आयात निकालें, जो क्लैंग मॉड्यूल (पुस्तकालयों या चौखटे का उपयोग करते हैं, जिनकी हेडर निर्देशिका में एक मॉड्यूल। मोड नियम है, जिससे आप कोड लिख सकते हैं @import MyModule )। (मेरे लिए, यह और चरण 1 एक और एक ही थे।)
  3. "हाँ" के लिए उपसर्ग हेडर साझा करने के लिए बिल्ड सेटिंग सेट करें। (मुझे नहीं लगता कि यह आवश्यक है, और इसका मेरे अपने प्रोजेक्ट में कोई प्रभाव नहीं होना चाहिए। मैं इसे केवल इसलिए कह रहा हूं क्योंकि मैंने इसे बदल दिया क्योंकि मैं कुछ भी करने की कोशिश करने के लिए तैयार था। :))
  4. Xcode से बाहर निकलें और अपने DerivedData / ModuleCache निर्देशिका को हटा दें (यदि मुझे सही याद है तो इसे ~ / लाइब्रेरी / डेवलपर पर कॉन्फ़िगर किया जा सकता है)।

यदि वह अभी भी काम नहीं करता है, तो आप अपने उपसर्ग शीर्ष लेख से कुछ और आयात हटाने का प्रयास कर सकते हैं। वहाँ कुछ यह ट्रिपिंग हो सकता है ...


3

ऐसा लगता है कि वे https://forums.developer.apple.com/thread/62737 के अनुसार इस पर सक्रिय रूप से काम कर रहे हैं, लेकिन जोड़ने के लिए एक वर्कअराउंड है

HEADERMAP_USES_VFS = YES

अपने लक्ष्य की बिल्ड सेटिंग्स के तहत (प्रोजेक्ट -> लक्ष्य -> ​​बिल्ड सेटिंग्स -> उपयोगकर्ता परिभाषित)।

पिछले एक महीने से लगातार काम कर रहे किसी अन्य समाधान के बाद, इस समाधान ने आज मेरे लिए हर बार काम किया।

संपादित करें: अभी भी कभी-कभी सब कुछ फिर से शुरू होता है, हालांकि ऐसा लगता है कि यह इस सेटिंग को परिभाषित करने के साथ बहुत कम बार करता है।


मैंने यह मान भी जोड़ा है, बिल्ड टाइम तेज़ है लेकिन यह वृद्धिशील बिल्ड को हल नहीं करता है। मैंने स्विफ्ट कंपाइलर को बदल दिया है - कोड जनरेशन / डिबग टू फास्ट, संपूर्ण मॉड्यूल ऑप्टिमाइज़ेशन ... अब तक का सबसे अच्छा परिणाम है
एंटोनियो जूनियर

मैं उपयोगकर्ता को परिभाषित भी नहीं कर सकता)
डेविड सीक

2
बनाएँ सेटिंग्स के बहुत नीचे @DavidSeek
लेजर हॉक

1
यदि आप इसे नहीं देखते हैं तो यह meandmark.com/blog/2011/03/xcode-4-accessing-build-settings पढ़ें
लेजर हॉक

3

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


हम काफी @IBDesignableनिर्देशों का उपयोग करते हैं ... क्या विशेष रूप से ऐसा कुछ है जिसे हमें देखना चाहिए?
स्टेन

मुझे लगता है कि एक-एक को छोड़कर उन्हें ढूंढना संभव है, और परिणाम की जांच करें, मेरा मामला पूरे प्रोजेक्ट में केवल 2 @ प्रत्यक्ष निर्देश का था।
ua24

2

माधुरी माने इस बारे में पूरी तरह से सही हैं। थोड़ा और स्पष्टता जोड़ने के लिए, नोट करने के लिए कुछ महत्वपूर्ण बिंदु:

यह केवल तभी लागू होता है जब आपके पास पुस्तकालयों / रूपरेखाओं पर निर्भरता होती है जो आपके लक्ष्य पर निर्भर करती है।

यदि "अनुमानित निर्भरताएँ ढूंढें" अक्षम है:

परिणाम: आवेदन लक्ष्य के निर्माण से पहले पुस्तकालय नहीं बनाया जाएगा। अनुप्रयोग लक्ष्य बनाने में विफल।

फिक्स: यह सुनिश्चित करने के लिए कि दूसरा परिदृश्य नहीं होता है, आपको आवश्यक लक्ष्यों को लक्ष्य सूची में जोड़ना होगा और उन्हें सही ढंग से ऑर्डर करना होगा।

स्रोत और विषय पर आगे पढ़ने: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

अब यदि आपकी पूरी परियोजना एक लक्ष्य के भीतर रखी गई है और यह संकलन करने के लिए 4 मिनट लगते हैं, तो आप इसके बारे में बहुत कुछ नहीं कर सकते हैं सिवाय इसके कि इसे ऊपर के लाभ लेने के लिए फ्रेमवर्क में तोड़ दें या यह पता लगा लें कि संकलन लैग कहां है। यदि आप पेंटकोड की तरह कुछ का उपयोग कर रहे हैं या इसमें UIKit कोड के बड़े हिस्से हैं, तो इसे तेजी से बदलकर ऑब्जेक्ट-सी में बदल दिया जाए


2

अपने लक्ष्य की निर्माण सेटिंग पर जाएं और सेट Defines Moduleकरें Yes

एक जोड़े के लिए मेरे लिए काम किया, बहुत जल्द यह दावा करने के लिए एक निश्चित समाधान है, लेकिन कम से कम हम कोशिश कर रहे हैं।


2

Apple ने कल Xcode का नया बीटा संस्करण जारी किया (14 नवंबर)

Xcode 8.2 beta 2

और यह मुद्दा जारी नोट में हल के रूप में चिह्नित किया गया है।

सिस्टम का निर्माण

• केवल छोटे परिवर्तन होने पर Xcode पूरे लक्ष्य का पुनर्निर्माण नहीं करेगा। (28892475)

यह मेरे लिए काम कर रहा है। बिल्ड स्पीड हमेशा की तरह वापस आई। हर कोई जो इस मुद्दे का सामना कर रहा है, उसे कोशिश करनी चाहिए!

https://developer.apple.com/download/


2

कृपया प्रोजेक्ट की बिल्ड सेटिंग पर जाएं और "C Language Dialect" बदलें।

जब आप xcode संस्करण को अपडेट करते हैं तो "C भाषा बोली" को "कंपाइलर डिफ़ॉल्ट" के बजाय "GNU99" पर सेट किया जाता है। कुछ बिंदु पर Xcode ने लाइब्रेरी प्रोजेक्ट सेटिंग्स को सही तरीके से माइग्रेट नहीं किया और इसलिए इसे GNU99 में सेट कर दिया गया। इससे समस्या का समाधान हो जाएगा


1

यदि आपने स्विफ्ट फ़ाइल में परिवर्तन करना शुरू कर दिया है तो ऐप बनाना शुरू करें, अंतिम टैब पर जाएं और बिल्ड लॉग पर क्लिक करें, "जाँच निर्भरता" चरण के दौरान बिल्ड को रोकें और इसे फिर से चलाएं। दूसरे रन पर यह केवल आपके द्वारा संशोधित फ़ाइलों का निर्माण करना चाहिए। अगर सही तरीके से किया जाए तो मुझे यह हर बार काम आता है। कोई भी प्रोजेक्ट सेटिंग परिवर्तन करने की आवश्यकता नहीं है।

यह Xcode में एक बग प्रतीत होता है।

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

यदि आप देखते हैं कि ऐप एक पूर्ण निर्माण कर रहा है, तो बिल्ड को रोकें और इस चाल को फिर से आज़माएं।

यदि आपने कोड का उपयोग नहीं किया है तो सीएमडी + सीटीआरएल + आर का उपयोग करें बिना डिबगर संलग्न किए ऐप को चलाने के लिए। ऐप नहीं बनाएंगे लेकिन अनावश्यक समय बचाने में मदद कर सकते हैं।


यह वास्तव में काम करता है, लेकिन कभी-कभी XCode कोड 1 के साथ विफल हो जाएगा और आपको एक क्लीन बिल्ड बनाना होगा। यह एक बुरा सपना है
एंटोनियो जूनियर

ऐसे अन्य परिदृश्य हैं जहां Xcode हमेशा पूर्ण निर्माण करेगा। अगर आपने संशोधित किया है तो मुझे पता चला है। हेडर को ब्रिज करने में शामिल .h फ़ाइल सभी स्विफ्ट फ़ाइलों को फिर से बनाएगी। अन्य परिदृश्य हो सकते हैं जो Xcode बग से संबंधित नहीं हैं।
व्लाद

ऐसे परिदृश्य हैं जहां केवल परिवर्तन एक फ़ंक्शन का नाम है या एक मौजूदा वर्ग / संरचना में जोड़ा गया एक नया गुण है जिसके परिणामस्वरूप संपूर्ण पुनर्निर्माण होता है।
एंटोनियो जूनियर

इस प्रश्न / उत्तर का संदर्भ लें, यह धागा इस का एक डुप्लिकेट है: समाधान है जो बेहतर काम करता है: stackoverflow.com/questions/39456223/…
व्लाद

1

अनचेक को "इंप्लिकेंट डिपेंडेंसी खोजें" समाधान लागू करके मेरी ओर से जारी किया गया मुद्दा।

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

उत्पाद -> योजना -> पॉड्स- "yourProjectName"

इसमें भी लागू करें:

उत्पाद -> योजना -> "yourProjectName"

यह मेरी मदद करता है, इसलिए मुझे आशा है कि यह संकेत किसी और की मदद करता है।

धन्यवाद


1

प्रयास करें: 1. प्रोजेक्ट पर नेविगेट करें 2. बिल्ड सेटिंग्स पर क्लिक करें। 3. जांचें कि ऑप्टिमाइज़ेशनवेल डिबगिंग के लिए किसी के लिए भी सेट नहीं है। 4. उपयोगकर्ता-निर्धारित सेटिंग जोड़ें पर क्लिक करें। हाँ पर SWIFT_WHOLE_MODULE_OPTIMIZATION सेट करें।

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


काम करने के लिए कुछ भी नहीं है जब मैं एक पत्र लिखता हूं।
चांदनी

-2

fcode संकलन के समय के लिए, IRAMDISK (वर्चुअल मेमोरी डिस्क) का उपयोग कर सकते हैं। संकलन समय को कम करने के लिए बहुत उपयोगी और प्रभावी साधन।

इसके अलावा अक्सर उपयोग किए जाने वाले एप्लिकेशन को स्पीडअप करने के लिए उपयोग कर सकते हैं।

डाउनलोड और उपयोग करने के लिए निम्नलिखित लिंक देखें: http://iramdisk.findmysoft.com/mac/


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