Διαγράψτε το Xcode DerivedData και τις cache προγραμματιστών με ασφάλεια
AskClean Team · Updated 2026-07-18
Το DerivedData είναι ο πρόχειρος φάκελος του Xcode για προϊόντα build και ευρετήρια, και μπορεί να μεγαλώσει αθόρυβα σε δεκάδες gigabytes. Είναι ασφαλές να διαγραφεί: τερματίστε το Xcode, αφαιρέστε τα περιεχόμενα του ~/Library/Developer/Xcode/DerivedData, και το Xcode ξαναχτίζει τα πάντα στο επόμενο build. Αυτός ο οδηγός καλύπτει αυτό, συν προσομοιωτές, archives και cache πακέτων.
Τι είναι το DerivedData και γιατί γίνεται τεράστιο
Το DerivedData είναι το μέρος όπου το Xcode φυλάει όλα όσα παράγει από τον πηγαίο κώδικά σας: ενδιάμεσα αντικείμενα build, μεταγλωττισμένα προϊόντα, cache modules, ευρετήρια συμβόλων για την αυτόματη συμπλήρωση κώδικα και τη μετάβαση σε ορισμό, και αρχεία καταγραφής build. Βρίσκεται από προεπιλογή στο ~/Library/Developer/Xcode/DerivedData, με έναν υποφάκελο για κάθε project ή workspace που έχετε ανοίξει ποτέ.
Μεγαλώνει για δομικό λόγο: το Xcode δημιουργεί φάκελο DerivedData για κάθε project που ανοίγετε — συμπεριλαμβανομένων εφάπαξ κλώνων που κάνατε build μία φορά και δεν ξαναγγίξατε — και δεν διαγράφει ποτέ κανέναν. Κάθε φάκελος κρατά ξεχωριστά προϊόντα build ανά διαμόρφωση και προορισμό (Debug και Release, προσομοιωτής και συσκευή), οπότε ένα μεσαίο project μπορεί να καταλαμβάνει αρκετά gigabytes, και ο φάκελος συνολικά φτάνει συνήθως τα 20-50 GB σε ένα ενεργό μηχάνημα ανάπτυξης.
Όλα μέσα του μπορούν εξ ορισμού να αναδημιουργηθούν — αυτό ακριβώς σημαίνει το «derived» (παραγόμενο). Η διαγραφή του DerivedData δεν αγγίζει ποτέ τον πηγαίο κώδικά σας, τις ρυθμίσεις του project σας ή οτιδήποτε βρίσκεται υπό έλεγχο εκδόσεων. Το μόνο κόστος είναι ο χρόνος: το επόμενο build κάθε project είναι πλήρες καθαρό build, και η δημιουργία ευρετηρίου τρέχει ξανά στο παρασκήνιο για μερικά λεπτά.
Διαγράψτε το DerivedData
Υπάρχουν τρεις τρόποι να το κάνετε, και καταλήγουν στο ίδιο σημείο. Η εντολή Clean Build Folder του Xcode (Product > Clean Build Folder, ή Command-Shift-K) καθαρίζει μόνο τα προϊόντα build του τρέχοντος ανοιχτού project — χρήσιμη για να διορθώσετε ένα παράξενο build, αλλά μετά βίας κουνά τη βελόνα του χώρου στον δίσκο. Για να ανακτήσετε πραγματικό χώρο, διαγράψτε τους ίδιους τους φακέλους του DerivedData.
Η διαγραφή ανά project είναι η χειρουργική επιλογή: κρατήστε το DerivedData για τα δύο-τρία projects που χτίζετε καθημερινά και αφαιρέστε τους φακέλους όλων των υπολοίπων. Η διαγραφή ολόκληρου του φακέλου είναι η γρήγορη επιλογή, και είναι κι αυτή μια χαρά — απλώς πληρώνετε το κόστος του πλήρους rebuild σε όλα τα projects ταυτόχρονα.
- Τερματίστε πρώτα το Xcode. Η διαγραφή του DerivedData ενώ το Xcode τρέχει μπορεί να μπερδέψει τον indexer του, και αρχεία που το Xcode έχει ανοιχτά ενδέχεται να μη διαγραφούν σωστά.
- Βρείτε τον φάκελο: στο Xcode, ανοίξτε Settings > Locations και κάντε κλικ στο βελάκι δίπλα στη διαδρομή DerivedData για να τον εμφανίσετε στο Finder. Ή στο Finder πατήστε Command-Shift-G και πληκτρολογήστε απευθείας ~/Library/Developer/Xcode/DerivedData.
- Ταξινομήστε τους υποφακέλους των projects κατά μέγεθος, επιλέξτε όσους θέλετε να φύγουν (ή Command-A για όλους) και μεταφέρετέ τους στον Κάδο. Ο Κάδος πρώτα είναι η ασφαλέστερη συνήθεια — μπορείτε να επαναφέρετε αμέσως αν αλλάξετε γνώμη.
- Εναλλακτικά από το Terminal: η rm -rf ~/Library/Developer/Xcode/DerivedData διαγράφει τα πάντα μονομιάς. Είναι πιο γρήγορη από το Finder για πολύ μεγάλους φακέλους, αλλά διαβάστε τη σημείωση παρακάτω πριν τη χρησιμοποιήσετε.
- Ξανανοίξτε το Xcode και κάντε build. Περιμένετε το πρώτο build κάθε project να διαρκέσει αισθητά περισσότερο, και το «Indexing» να τρέχει για λίγο στη γραμμή δραστηριότητας — και τα δύο είναι εφάπαξ κόστη.
Προσοχή με την rm -rf: παρακάμπτει τον Κάδο και διαγράφει οριστικά, χωρίς αναίρεση. Πληκτρολογήστε τη διαδρομή ακριβώς, μην την εκτελέσετε ποτέ με sudo για αυτή τη δουλειά, και αν δεν νιώθετε άνετα στο Terminal, η διαδρομή μέσω Finder κάνει την ίδια δουλειά αναστρέψιμα.
Καθαρίστε παλιά runtimes προσομοιωτών
Οι προσομοιωτές είναι συνήθως ο δεύτερος μεγαλύτερος καταναλωτής χώρου των προγραμματιστών μετά το DerivedData. Κάθε runtime iOS, watchOS ή tvOS που έχετε κατεβάσει ποτέ καταλαμβάνει 5-8 GB, και κάθε προσομοιωμένη συσκευή κρατά τον δικό της φάκελο δεδομένων στο ~/Library/Developer/CoreSimulator/Devices. Αν έχετε περάσει από μερικές αναβαθμίσεις του Xcode, πιθανότατα έχετε runtimes για εκδόσεις iOS που σταματήσατε να στοχεύετε εδώ και χρόνια.
Το γρηγορότερο κέρδος είναι η ενσωματωμένη εντολή καθαρισμού: εκτελέστε xcrun simctl delete unavailable στο Terminal. Διαγράφει κάθε συσκευή προσομοιωτή της οποίας το runtime δεν είναι πλέον εγκατεστημένο — τα ορφανά που άφησαν πίσω τους παλιές εκδόσεις του Xcode — και δεν αγγίζει τίποτα που μπορείτε ακόμη να χρησιμοποιήσετε.
Για τα ίδια τα runtimes, ανοίξτε στο Xcode τα Settings > Platforms (ονομάζονται Components σε παλαιότερες εκδόσεις του Xcode). Θα δείτε κάθε εγκατεστημένο runtime προσομοιωτή με το μέγεθός του· επιλέξτε ένα παλιό και διαγράψτε το. Κρατήστε μόνο το νεότερο runtime ανά πλατφόρμα, εκτός αν δοκιμάζετε ενεργά σε παλαιότερες εκδόσεις λειτουργικού.
Μπορείτε επίσης να κλαδέψετε μεμονωμένες προσομοιωμένες συσκευές στο Window > Devices and Simulators: περάστε στην καρτέλα Simulators, κάντε δεξί κλικ σε όποια συσκευή δεν χρησιμοποιείτε ποτέ — τα έξι διπλά μοντέλα iPhone με δεδομένα από παλιές δοκιμές — και επιλέξτε Delete. Μαζί της φεύγουν τα αποθηκευμένα δεδομένα και οι εφαρμογές της.
Archives, αρχεία υποστήριξης συσκευών και cache
Τα archives συσσωρεύονται στο ~/Library/Developer/Xcode/Archives κάθε φορά που εκτελείτε Product > Archive για να διανείμετε ένα build. Κάθε archive περιέχει ένα πλήρες build της εφαρμογής συν τα σύμβολα εντοπισμού σφαλμάτων dSYM, συχνά 100 MB έως 1 GB το καθένα. Πριν διαγράψετε, γνωρίστε το αντάλλαγμα: τα dSYM μέσα τους είναι αυτά που σας επιτρέπουν να αποσυμβολοποιείτε αναφορές σφαλμάτων για εκείνο ακριβώς το build. Κρατήστε archives για εκδόσεις που είναι ακόμη ενεργές στο App Store ή στο TestFlight (ή βεβαιωθείτε ότι το App Store Connect έχει τα dSYM) και διαγράψτε τα υπόλοιπα — η ασφαλέστερη διαδρομή είναι ο Organizer του Xcode (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 κρατά επίσης τις δικές του cache στο ~/Library/Caches/com.apple.dt.Xcode, και οι προσομοιωτές τις δικές τους στο ~/Library/Developer/CoreSimulator/Caches — και οι δύο καθαρίζονται με ασφάλεια όταν το Xcode και η εφαρμογή Simulator δεν τρέχουν, και ξαναχτίζονται κατ' απαίτηση.
Cache διαχειριστών πακέτων (SwiftPM, CocoaPods, npm, Homebrew)
Οι διαχειριστές πακέτων κρατούν κάθε εξάρτηση που έχουν κατεβάσει ποτέ, ώστε οι μελλοντικές εγκαταστάσεις να είναι γρήγορες. Αυτό είναι καλή μηχανική και κακή υγιεινή δίσκου: οι cache μόνο μεγαλώνουν, και σε ένα μηχάνημα με μερικά χρόνια projects φτάνουν αθόρυβα τα 10-20 GB. Όλες καθαρίζονται με ασφάλεια — στη χειρότερη περίπτωση, η επόμενη εγκατάσταση ξανακατεβάζει τα πακέτα.
Ο Swift Package Manager αποθηκεύει τα κατεβασμένα πακέτα στο ~/Library/Caches/org.swift.swiftpm, και τα resolved checkouts κάθε project ζουν επίσης μέσα στον φάκελο DerivedData του — οπότε ο καθαρισμός του DerivedData τα καθαρίζει ήδη. Την κοινόχρηστη cache μπορείτε να τη διαγράψετε από το Finder ή με rm -rf σε εκείνη τη διαδρομή.
Το CocoaPods κρατά τα κατεβασμένα pods στο ~/Library/Caches/CocoaPods. Ο καθαρός τρόπος να την αδειάσετε είναι η ενσωματωμένη εντολή: pod cache clean --all. Οι φάκελοι Pods των projects σας μένουν ανέγγιχτοι· φεύγει μόνο η cache λήψεων.
Η cache του npm ζει στο ~/.npm και μπορεί να φτάσει πολλά gigabytes σε ένα μηχάνημα με έντονη χρήση JavaScript. Εκτελέστε npm cache clean --force για να την αδειάσετε (το npm επιμένει στη σημαία επειδή η cache είναι αυτοδιορθούμενη και κανονικά δεν χρειάζεται ποτέ καθάρισμα — η διαγραφή της παραμένει απολύτως ασφαλής). Οι χρήστες του pnpm μπορούν αντ' αυτού να εκτελέσουν pnpm store prune.
Το Homebrew στοιβάζει παλιές λήψεις και ξεπερασμένες εκδόσεις πακέτων. Η brew cleanup αφαιρεί ξεπερασμένες εκδόσεις και μπαγιάτικες λήψεις· η brew cleanup --prune=all αδειάζει επιπλέον ολόκληρη την cache λήψεων. Εκτελέστε πρώτα brew cleanup -n αν θέλετε μια δοκιμαστική λίστα με όσα θα έφευγαν.
Αυτοματοποιήστε το
Όλα τα παραπάνω δουλεύουν, αλλά τα άχρηστα των προγραμματιστών είναι ένας φαύλος κύκλος: το DerivedData επιστρέφει μέσα σε μια εβδομάδα κανονικής δουλειάς, οι cache ξαναγεμίζουν, και κάθε ενημέρωση του Xcode αφήνει άλλο ένα runtime ορφανό. Αν προτιμάτε να μην ξανατρέχετε έξι χειροκίνητες διαδικασίες κάθε μήνα, εδώ αξίζει η αυτοματοποίηση — με ένα εργαλείο που δείχνει τον συλλογισμό του αντί να διαγράφει σιωπηλά μαζικά.
Το AskClean αντιμετωπίζει τα αρχεία προγραμματιστών ως κατηγορίες πρώτης τάξης: μία σάρωση αναλύει το Xcode DerivedData ανά project, τα παλιά runtimes προσομοιωτών (με ανάγνωση μέσω simctl, κρατώντας το νεότερο ανά πλατφόρμα), τα αρχεία υποστήριξης συσκευών και τις cache διαχειριστών πακέτων για npm, SwiftPM, cargo, uv και άλλα. Πιάνει και τους νεότερους καταναλωτές χώρου — τις cache μοντέλων Hugging Face και Ollama — τις οποίες παραθέτει ανά μοντέλο και αφήνει μη επιλεγμένες από προεπιλογή.
Κάθε στοιχείο συνοδεύεται από επεξήγηση — τι είναι, αν μπορεί να αναδημιουργηθεί, τι κοστίζει η διαγραφή — και τίποτα δεν εκτελείται μέχρι να το επιβεβαιώσετε. Οι διαγραφές πηγαίνουν στον Κάδο, ώστε ένα λανθασμένο κλικ να αναιρείται με ένα σύρσιμο, και ο πηγαίος κώδικας, τα έγγραφα και οι φωτογραφίες σας δεν αγγίζονται ποτέ. Είναι η ίδια λίστα ελέγχου με αυτόν τον οδηγό, μείον τη μία ώρα δουλειάς στο Terminal.
FAQ
Είναι ασφαλές να διαγράψω το DerivedData;
Ναι — είναι μία από τις ασφαλέστερες μεγάλες διαγραφές σε ένα Mac. Το DerivedData περιέχει μόνο αρχεία που το Xcode παράγει από τον πηγαίο κώδικά σας: προϊόντα build, cache modules, ευρετήρια και αρχεία καταγραφής. Ο κώδικας, τα αρχεία project και το ιστορικό git σας ζουν αλλού και δεν επηρεάζονται ποτέ. Η μόνη συνέπεια είναι ότι το επόμενο build κάθε project είναι πλήρες rebuild και η δημιουργία ευρετηρίου τρέχει ξανά.
Πόσο συχνά πρέπει να καθαρίζω το DerivedData;
Δεν υπάρχει υποχρεωτικό πρόγραμμα — καθαρίστε το όταν είναι αρκετά μεγάλο ώστε να έχει σημασία, δηλαδή για τους περισσότερους ενεργούς προγραμματιστές κάθε έναν-δύο μήνες. Δύο στιγμές το δικαιολογούν πάντα: όταν χρειάζεστε γρήγορα χώρο στον δίσκο, και όταν ένα project εμφανίζει ανεξήγητα σφάλματα build ή μπαγιάτικη αυτόματη συμπλήρωση, όπου το σβήσιμο του DerivedData είναι η τυπική πρώτη λύση.
Θα είναι πιο αργό το Xcode αφού διαγράψω το DerivedData;
Προσωρινά, ναι. Το πρώτο build κάθε project είναι καθαρό build, που μπορεί να διαρκέσει πολλαπλάσια από ένα σταδιακό, και η δημιουργία ευρετηρίου στο παρασκήνιο χρειάζεται μερικά λεπτά μέχρι η αυτόματη συμπλήρωση και η αναζήτηση να επανέλθουν πλήρως. Μετά από αυτόν τον πρώτο κύκλο, η απόδοση είναι ακριβώς όπως ήταν — το DerivedData κρατά cache, όχι βελτιστοποιήσεις που χάνετε οριστικά.
Και το ~/Library/Developer/CoreSimulator — μπορώ να το διαγράψω;
Όχι στα τυφλά — κρατά τους εγκατεστημένους προσομοιωτές σας και τα δεδομένα τους, και η ολική διαγραφή του τούς αχρηστεύει μέχρι να επανεγκαταστήσετε runtimes. Κλαδέψτε το σωστά: εκτελέστε xcrun simctl delete unavailable για τις ορφανές συσκευές, αφαιρέστε παλιά runtimes στα Settings > Platforms του Xcode, διαγράψτε αχρησιμοποίητες συσκευές στο Devices and Simulators, και καθαρίστε με το χέρι μόνο τον υποφάκελο Caches.
Κάνει το ίδιο πράγμα το Clean Build Folder;
Όχι. Το Product > Clean Build Folder (Command-Shift-K) καθαρίζει τα προϊόντα build μόνο του τρέχοντος project και αφήνει στη θέση τους τα ευρετήρια, τις cache modules και τους φακέλους όλων των άλλων projects. Είναι εργαλείο αντιμετώπισης προβλημάτων build, όχι εργαλείο χώρου δίσκου — η ανάκτηση πραγματικού χώρου σημαίνει διαγραφή των ίδιων των φακέλων του DerivedData.
Sources