AskCleanAskClean

Xcode DerivedData और डेवलपर कैश सुरक्षित रूप से डिलीट करें

AskClean Team · Updated 2026-07-18

DerivedData बिल्ड प्रोडक्ट और इंडेक्स के लिए Xcode का स्क्रैच फ़ोल्डर है, और यह चुपचाप दसियों गीगाबाइट तक बढ़ सकता है। इसे डिलीट करना सुरक्षित है: Xcode बंद करें, ~/Library/Developer/Xcode/DerivedData का कॉन्टेंट हटाएँ, और अगले बिल्ड पर Xcode सब कुछ दोबारा बना लेता है। यह गाइड इसके साथ सिम्युलेटर, आर्काइव और पैकेज कैश भी कवर करती है।

DerivedData क्या है और यह इतना विशाल क्यों हो जाता है

DerivedData वह जगह है जहाँ Xcode आपके सोर्स कोड से निकाली (derive की) हर चीज़ रखता है: इंटरमीडिएट बिल्ड ऑब्जेक्ट, कंपाइल किए गए प्रोडक्ट, मॉड्यूल कैश, कोड कंप्लीशन व jump-to-definition के लिए सिंबल इंडेक्स, और बिल्ड लॉग। डिफ़ॉल्ट रूप से यह ~/Library/Developer/Xcode/DerivedData में रहता है — आपने अब तक जो भी प्रोजेक्ट या वर्कस्पेस खोला है, हर एक के लिए एक सबफ़ोल्डर।

इसके बढ़ने की वजह संरचनात्मक है: Xcode हर खोले गए प्रोजेक्ट के लिए एक DerivedData फ़ोल्डर बनाता है — उन एक-बार क्लोन किए प्रोजेक्ट के लिए भी जिन्हें आपने एक बार बिल्ड करके फिर कभी नहीं छुआ — और इनमें से किसी को भी कभी डिलीट नहीं करता। हर फ़ोल्डर में कॉन्फ़िगरेशन और डेस्टिनेशन (Debug और Release, सिम्युलेटर और डिवाइस) के हिसाब से अलग-अलग बिल्ड प्रोडक्ट होते हैं, इसलिए एक मँझोला प्रोजेक्ट भी कई गीगाबाइट घेर सकता है, और काम-काजी डेव मशीन पर पूरा फ़ोल्डर आमतौर पर 20-50 GB तक पहुँच जाता है।

इसके अंदर की हर चीज़ परिभाषा से ही दोबारा बन सकती है — "derived" का मतलब यही है। DerivedData डिलीट करने से आपका सोर्स कोड, प्रोजेक्ट सेटिंग या वर्ज़न कंट्रोल की कोई चीज़ कभी नहीं छुई जाती। इकलौती कीमत समय है: हर प्रोजेक्ट का अगला बिल्ड एक पूरा क्लीन बिल्ड होता है, और इंडेक्सिंग कुछ मिनट पृष्ठभूमि में दोबारा चलती है।

DerivedData डिलीट करें

इसके तीन तरीक़े हैं, और तीनों एक ही जगह पहुँचते हैं। Xcode का Clean Build Folder कमांड (Product > Clean Build Folder, या Command-Shift-K) सिर्फ़ मौजूदा खुले प्रोजेक्ट के बिल्ड प्रोडक्ट साफ़ करता है — किसी अजीब बिल्ड को ठीक करने के लिए उपयोगी, पर डिस्क-स्पेस की सुई इससे मुश्किल से हिलती है। असली जगह वापस पाने के लिए DerivedData फ़ोल्डर खुद डिलीट करें।

प्रोजेक्ट-दर-प्रोजेक्ट डिलीट करना सर्जिकल विकल्प है: जिन दो-तीन प्रोजेक्ट को आप रोज़ बिल्ड करते हैं उनका DerivedData रखें, और बाक़ी सबके फ़ोल्डर हटा दें। पूरा फ़ोल्डर एक साथ डिलीट करना तेज़ विकल्प है, और वह भी ठीक है — बस पूरे-रीबिल्ड की कीमत आप हर प्रोजेक्ट पर एक साथ चुकाते हैं।

  1. सबसे पहले Xcode बंद करें। Xcode चलते हुए DerivedData डिलीट करने से उसका इंडेक्सर उलझन में पड़ सकता है, और Xcode की खुली फ़ाइलें ठीक से डिलीट नहीं हो पातीं।
  2. फ़ोल्डर ढूँढ़ें: Xcode में Settings > Locations खोलें और DerivedData पाथ के बग़ल के छोटे तीर पर क्लिक करके उसे Finder में देखें। या Finder में Command-Shift-G दबाकर सीधे ~/Library/Developer/Xcode/DerivedData डालें।
  3. प्रोजेक्ट सबफ़ोल्डरों को साइज़ के हिसाब से क्रम में लगाएँ, जिन्हें हटाना है उन्हें चुनें (या सबके लिए Command-A) और Trash में भेज दें। पहले Trash में डालना ही सुरक्षित आदत है — इरादा बदले तो तुरंत वापस ला सकते हैं।
  4. Terminal से करना हो तो: rm -rf ~/Library/Developer/Xcode/DerivedData एक झटके में सब कुछ डिलीट कर देता है। बहुत बड़े फ़ोल्डरों के लिए यह Finder से तेज़ है, पर इस्तेमाल से पहले नीचे का नोट ज़रूर पढ़ें।
  5. Xcode दोबारा खोलकर बिल्ड करें। हर प्रोजेक्ट का पहला बिल्ड ध्यान देने लायक़ धीमा होगा, और ऐक्टिविटी बार में कुछ देर "Indexing" चलेगा — दोनों एक बार की कीमतें हैं।

rm -rf के साथ सावधान रहें: यह Trash को बायपास करके स्थायी रूप से डिलीट करता है, कोई undo नहीं। पाथ बिल्कुल सही टाइप करें, इस काम के लिए इसे कभी sudo से न चलाएँ, और Terminal में सहज न हों तो Finder वाला रास्ता यही काम वापस लाने योग्य ढंग से करता है।

पुराने सिम्युलेटर रनटाइम साफ़ करें

DerivedData के बाद डेवलपर जगह का दूसरा सबसे बड़ा भक्षक आमतौर पर सिम्युलेटर होते हैं। आपने अब तक जो भी iOS, watchOS या tvOS रनटाइम डाउनलोड किया है, हर एक 5-8 GB घेरता है, और हर सिम्युलेटेड डिवाइस ~/Library/Developer/CoreSimulator/Devices के नीचे अपना डेटा फ़ोल्डर रखता है। कुछ Xcode अपग्रेड से गुज़र चुके हैं तो आपके पास शायद उन iOS वर्ज़न के रनटाइम पड़े हैं जिन्हें टारगेट करना आप सालों पहले छोड़ चुके।

सबसे तेज़ जीत बिल्ट-इन क्लीनअप कमांड है: Terminal में xcrun simctl delete unavailable चलाएँ। यह हर उस सिम्युलेटर डिवाइस को डिलीट करता है जिसका रनटाइम अब इंस्टॉल नहीं है — पुराने Xcode वर्ज़न के छोड़े अनाथ — और जो कुछ आप अब भी इस्तेमाल कर सकते हैं उसे नहीं छूता।

खुद रनटाइम के लिए Xcode की Settings > Platforms खोलें (पुराने Xcode वर्ज़न में इसका नाम Components है)। आपको हर इंस्टॉल किया सिम्युलेटर रनटाइम उसके साइज़ के साथ दिखेगा; कोई पुराना चुनकर डिलीट करें। जब तक आप सक्रिय रूप से पुराने OS वर्ज़न पर टेस्ट न करते हों, हर प्लैटफ़ॉर्म का सिर्फ़ नवीनतम रनटाइम रखें।

अलग-अलग सिम्युलेटेड डिवाइस भी Window > Devices and Simulators में छाँटे जा सकते हैं: Simulators टैब पर जाएँ, जिस डिवाइस को आप कभी इस्तेमाल नहीं करते उस पर राइट-क्लिक करें — पुराने टेस्ट रन के डेटा वाले छह डुप्लिकेट iPhone मॉडल — और Delete चुनें। हर डिवाइस का सहेजा डेटा और ऐप्स उसके साथ चले जाते हैं।

आर्काइव, डिवाइस सपोर्ट फ़ाइलें और कैश

जब भी आप बिल्ड बाँटने के लिए Product > Archive चलाते हैं, ~/Library/Developer/Xcode/Archives में आर्काइव जमा होते जाते हैं। हर आर्काइव में एक पूरा ऐप बिल्ड और उसके dSYM डीबग सिंबल होते हैं — अक्सर 100 MB से 1 GB प्रति आर्काइव। डिलीट करने से पहले सौदा समझ लें: अंदर के dSYM ही उस ख़ास बिल्ड की क्रैश रिपोर्ट को symbolicate करने देते हैं। App Store या TestFlight पर अभी लाइव वर्ज़न के आर्काइव रखें (या पक्का करें कि App Store Connect के पास dSYM हैं) और बाक़ी डिलीट करें — सबसे सुरक्षित रास्ता Xcode का Organizer है (Window > Organizer > Archives), जहाँ आप संदर्भ के साथ उन्हें देख और डिलीट कर सकते हैं।

iOS DeviceSupport, यानी ~/Library/Developer/Xcode/iOS DeviceSupport, में वे डीबगिंग सिंबल रहते हैं जो Xcode हर उस असली iPhone या iPad से कॉपी करता है जिसे आपने कभी प्लग किया — हर iOS वर्ज़न का एक फ़ोल्डर, आमतौर पर 2-5 GB। जिन iOS वर्ज़न पर अब आपका कोई डिवाइस नहीं चलता, उनके फ़ोल्डर शुद्ध मृत बोझ हैं: डिलीट कर दें, और कभी उस वर्ज़न का डिवाइस दोबारा कनेक्ट करें तो Xcode सिंबल बस फिर से कॉपी कर लेगा (एक बार "Preparing debugger support" दिखेगा)। watchOS और tvOS डिवाइसों के लिए भी ऐसे ही सहोदर फ़ोल्डर होते हैं।

Xcode अपने कैश ~/Library/Caches/com.apple.dt.Xcode में भी रखता है, और सिम्युलेटर अपने ~/Library/Developer/CoreSimulator/Caches में — दोनों तब साफ़ करना सुरक्षित है जब Xcode और Simulator ऐप न चल रहे हों, और दोनों ज़रूरत पड़ने पर दोबारा बन जाते हैं।

पैकेज मैनेजर कैश (SwiftPM, CocoaPods, npm, Homebrew)

पैकेज मैनेजर अब तक डाउनलोड की हर डिपेंडेंसी सँभालकर रखते हैं ताकि आगे के इंस्टॉल तेज़ हों। यह अच्छी इंजीनियरिंग है और बुरी डिस्क-सफ़ाई: ये कैश सिर्फ़ बढ़ते हैं, और कुछ साल के प्रोजेक्ट देख चुकी मशीन पर चुपचाप 10-20 GB जोड़ देते हैं। सबको साफ़ करना सुरक्षित है — बदतर से बदतर हालत में आपका अगला इंस्टॉल पैकेज दोबारा डाउनलोड कर लेगा।

Swift Package Manager डाउनलोड किए पैकेज ~/Library/Caches/org.swift.swiftpm में कैश करता है, और हर प्रोजेक्ट के resolved checkout उसके DerivedData फ़ोल्डर के अंदर भी रहते हैं — यानी DerivedData साफ़ करने से वे पहले ही साफ़ हो जाते हैं। साझा कैश आप Finder से डिलीट कर सकते हैं, या उस पाथ पर rm -rf से।

CocoaPods अपने डाउनलोड किए pods ~/Library/Caches/CocoaPods में रखता है। इसे खाली करने का साफ़-सुथरा तरीक़ा बिल्ट-इन कमांड है: pod cache clean --all। आपके प्रोजेक्ट के Pods फ़ोल्डर अछूते रहते हैं; सिर्फ़ डाउनलोड कैश जाता है।

npm का कैश ~/.npm में रहता है और JavaScript-भारी मशीन पर कई गीगाबाइट तक पहुँच सकता है। इसे खाली करने के लिए npm cache clean --force चलाएँ (npm यह फ़्लैग इसलिए माँगता है कि कैश self-healing है और आमतौर पर उसे साफ़ करने की ज़रूरत नहीं पड़ती — फिर भी उसे डिलीट करना पूरी तरह सुरक्षित है)। pnpm वाले इसकी जगह pnpm store prune चला सकते हैं।

Homebrew पुराने डाउनलोड और आउटडेटेड पैकेज वर्ज़न जमा करता रहता है। brew cleanup आउटडेटेड वर्ज़न और बासी डाउनलोड हटाता है; brew cleanup --prune=all पूरा डाउनलोड कैश भी खाली कर देता है। पहले brew cleanup -n चलाएँ अगर आप dry-run में देखना चाहते हैं कि क्या-क्या जाएगा।

इसे ऑटोमेट करें

ऊपर का सब कुछ काम करता है, लेकिन डेवलपर कचरा एक ट्रेडमिल है: सामान्य काम के हफ़्ते भर में DerivedData वापस आ जाता है, कैश फिर भर जाते हैं, और हर Xcode अपडेट एक और रनटाइम अनाथ छोड़ जाता है। छह मैनुअल प्रक्रियाएँ हर महीने दोहराना मंज़ूर नहीं, तो ऑटोमेट करने लायक़ हिस्सा यही है — ऐसे टूल से जो चुपचाप थोक में डिलीट करने की बजाय अपनी सोच दिखाता हो।

AskClean डेवलपर फ़ाइलों को प्रथम-श्रेणी की श्रेणियाँ मानता है: एक स्कैन Xcode DerivedData को प्रोजेक्ट-दर-प्रोजेक्ट, पुराने सिम्युलेटर रनटाइम (simctl से पढ़े गए, हर प्लैटफ़ॉर्म का नवीनतम रखते हुए), डिवाइस सपोर्ट फ़ाइलें, और npm, SwiftPM, cargo, uv व अन्य के पैकेज-मैनेजर कैश आइटम-दर-आइटम सूचीबद्ध कर देता है। यह नए ज़माने के जगह-भक्षकों — Hugging Face और Ollama मॉडल कैश — को भी पकड़ता है, जिन्हें यह मॉडल-दर-मॉडल दिखाता है और डिफ़ॉल्ट रूप से अनचेक्ड छोड़ता है।

हर आइटम के साथ व्याख्या आती है — यह क्या है, क्या दोबारा बन सकता है, डिलीट की कीमत क्या है — और आपकी पुष्टि के बिना कुछ नहीं चलता। डिलीट Trash में जाते हैं, इसलिए ग़लत क्लिक एक ड्रैग-एंड-ड्रॉप में पलट जाता है, और आपका सोर्स कोड, डॉक्यूमेंट व फ़ोटो कभी छुए नहीं जाते। यह वही चेकलिस्ट है जो इस गाइड में है — बस Terminal के घंटे भर के काम के बिना।

FAQ

क्या DerivedData डिलीट करना सुरक्षित है?

हाँ — यह Mac पर सबसे सुरक्षित बड़े डिलीट में से एक है। DerivedData में सिर्फ़ वे फ़ाइलें होती हैं जो Xcode आपके सोर्स से बनाता है: बिल्ड प्रोडक्ट, मॉड्यूल कैश, इंडेक्स और लॉग। आपका कोड, प्रोजेक्ट फ़ाइलें और git हिस्ट्री कहीं और रहते हैं और कभी प्रभावित नहीं होते। नतीजा बस इतना है कि हर प्रोजेक्ट का अगला बिल्ड पूरा रीबिल्ड होता है और इंडेक्सिंग दोबारा चलती है।

DerivedData कितनी बार साफ़ करना चाहिए?

कोई तय समय-सारणी नहीं है — जब यह इतना बड़ा हो जाए कि फ़र्क़ पड़े तब साफ़ करें, जो ज़्यादातर सक्रिय डेवलपरों के लिए हर एक-दो महीने का मतलब रखता है। दो मौक़े हमेशा इसे जायज़ ठहराते हैं: जब आपको फ़ौरन डिस्क स्पेस चाहिए, और जब किसी प्रोजेक्ट में बेवजह के बिल्ड एरर या बासी कोड कंप्लीशन दिखे — वहाँ DerivedData मिटाना मानक पहला इलाज है।

DerivedData डिलीट करने के बाद क्या Xcode धीमा होगा?

अस्थायी रूप से, हाँ। हर प्रोजेक्ट का पहला बिल्ड क्लीन बिल्ड होता है, जो इंक्रीमेंटल से कई गुना लंबा चल सकता है, और कोड कंप्लीशन व सर्च के पूरी तरह लौटने से पहले पृष्ठभूमि इंडेक्सिंग को कुछ मिनट चाहिए। उस पहले चक्र के बाद परफ़ॉर्मेंस बिल्कुल पहले जैसी है — DerivedData में कैश हैं, ऐसे ऑप्टिमाइज़ेशन नहीं जो आप स्थायी रूप से खो दें।

~/Library/Developer/CoreSimulator का क्या — क्या मैं उसे डिलीट कर सकता हूँ?

आँख मूँदकर नहीं — उसमें आपके अभी इंस्टॉल किए सिम्युलेटर और उनका डेटा रहता है, और उसे समूचा डिलीट करने से वे रनटाइम दोबारा इंस्टॉल होने तक टूट जाते हैं। उसे ढंग से छाँटें: अनाथ डिवाइसों के लिए xcrun simctl delete unavailable चलाएँ, Xcode की Settings > Platforms में पुराने रनटाइम हटाएँ, Devices and Simulators में बेकार डिवाइस डिलीट करें, और हाथ से सिर्फ़ Caches सबफ़ोल्डर साफ़ करें।

क्या Clean Build Folder भी यही काम करता है?

नहीं। Product > Clean Build Folder (Command-Shift-K) सिर्फ़ मौजूदा प्रोजेक्ट के बिल्ड प्रोडक्ट साफ़ करता है और इंडेक्स, मॉड्यूल कैश व बाक़ी हर प्रोजेक्ट के फ़ोल्डर जस के तस छोड़ देता है। यह बिल्ड-समस्या सुलझाने का टूल है, डिस्क-स्पेस का नहीं — असली जगह वापस पाने का मतलब है DerivedData फ़ोल्डर खुद डिलीट करना।

Sources