हमें भी यही समस्या थी और हमने इसे ठीक किया। दो बार।
वृद्धिशील निर्माण (एक ही मशीन का निर्माण):
इससे पहले: ~ 10 मीटर के बाद: ~ 35 एस
कैसे?
पहले अपने अनुभव से शुरू करते हैं। हमारे पास एक बड़ी स्विफ्ट / ओज-सी परियोजना थी और यह मुख्य चिंता का विषय था: निर्माण समय धीमा था और आपको एक नई सुविधा (शाब्दिक) को लागू करने के लिए एक नई परियोजना तैयार करनी थी। कभी काम न करने वाले सिंटैक्स हाइलाइटिंग के लिए बोनस अंक।
सिद्धांत
इसे ठीक करने के लिए आपको वास्तव में समझना होगा कि सिस्टम कैसे काम करता है। उदाहरण के लिए, आइए इस कोड स्निपेट को आज़माएँ:
import FacebookSDK
import RxSwift
import PinLayout
और कल्पना करें कि आप अपनी फ़ाइल में इन सभी आयातों का उपयोग करते हैं। और यह फ़ाइल किसी अन्य फ़ाइल पर भी निर्भर करती है, जो किसी अन्य लाइब्रेरी पर निर्भर करती है, जो बदले में किसी अन्य लाइब्रेरी आदि का उपयोग करती है।
तो अपनी फाइल को संकलित करने के लिए Xcode को आपके द्वारा बताई गई प्रत्येक लाइब्रेरी को संकलित करना होगा और हर फाइल पर निर्भर करता है, इसलिए यदि आप "कोर" फ़ाइलों में से एक को बदलते हैं तो Xcode को सचमुच पूरे प्रोजेक्ट का पुनर्निर्माण करना होगा।

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

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

ओबज-सी / स्विफ्ट पुल:
- [दोहराए गए कदम] स्विफ्ट कोड बनाएँ, जिसे ओबज-सी कोड संकलित करने की आवश्यकता है
- [दोहराए गए कदम] ओज-सी कोड बनाएँ, जो स्विफ्ट कोड को संकलित करने के लिए आवश्यक है
- जब तक आपके पास केवल गैर-भरोसेमंद स्विफ्ट और ओबज-सी कोड नहीं बचा है, तब तक 1 और 2 दोहराएं
- ओबज-सी कोड बनाएँ
- स्विफ्ट कोड बनाएँ

इसलिए यदि आप चरण 1 या 2 से कुछ बदलते हैं, तो आप मूल रूप से परेशानी में हैं। सबसे अच्छा उपाय ओब्ज-सी / स्विफ्ट ब्रिज को कम करना है (और इसे अपनी परियोजना से हटा दें)।
यदि आपके पास ओबज-सी / स्विफ्ट ब्रिज नहीं है, तो यह बहुत बढ़िया है और आप अगले चरण पर जाने के लिए अच्छे हैं:
स्विफ्ट पैकेज मैनेजर
SwiftPM में स्थानांतरित होने का समय (या कम से कम अपने कोकोपोड्स को बेहतर तरीके से कॉन्फ़िगर करने के लिए)।
बात यह है, डिफ़ॉल्ट Cocoapods विन्यास के साथ सबसे चौखटे अपने आप को बहुत सारे सामानों के साथ खींचते हैं जिनकी आपको ज़रूरत नहीं है।
उदाहरण के लिए, PinLayout जैसी केवल एक निर्भरता के साथ एक खाली प्रोजेक्ट बनाने के लिए, इस कोड को Cocoapods (डिफ़ॉल्ट कॉन्फ़िगरेशन) और SwiftPM के साथ लिखने का प्रयास करें।
import PinLayout
final class TestViewController: UIViewController {
}
Spoiler: Cocoapods इस कोड को संकलित करेगा, क्योंकि Cocoapods हर जगह PinLayout (UIKit सहित) और SwiftPM का आयात करेगा क्योंकि SwiftPM परमाणु फ्रेमवर्क को परमाणु रूप से आयात नहीं करता है।
डर्टी हैक
क्या आपको याद है कि Xcode बिल्ड मल्टी थ्रेडेड है?
ठीक है, आप इसका दुरुपयोग कर सकते हैं, यदि आप अपनी परियोजना को कई स्वतंत्र टुकड़ों में विभाजित करने में सक्षम हैं और उन सभी को अपनी परियोजना के लिए स्वतंत्र रूपरेखा के रूप में आयात कर सकते हैं। यह युग्मन को कम करता है और यह वास्तव में पहला समाधान था जिसका हमने उपयोग किया था, लेकिन यह वास्तव में बहुत प्रभावी नहीं था, क्योंकि हम केवल वेतन वृद्धि के समय को घटाकर ~ 4-5 मीटर कर सकते थे जो कि पहली विधि की तुलना में कुछ भी नहीं है।