AskClean

Διαγράψτε το Xcode DerivedData και τις cache προγραμματιστών με ασφάλεια

Ομάδα AskClean · Ενημερώθηκε 2026-11-02

Το DerivedData είναι ο πρόχειρος φάκελος του Xcode για προϊόντα build και ευρετήρια και μπορεί να φτάσει αθόρυβα τις δεκάδες gigabytes. Η διαγραφή του είναι ασφαλής: τερματίστε το Xcode, αφαιρέστε τα περιεχόμενα του ~/Library/Developer/Xcode/DerivedData και το Xcode θα τα δημιουργήσει ξανά στο επόμενο build. Ο οδηγός καλύπτει επίσης τους προσομοιωτές, τα archives και τις cache πακέτων.

Διαγράψτε το Xcode DerivedData και τις cache προγραμματιστών με ασφάλεια
Διαγράψτε με ασφάλεια το DerivedData του Xcode, αφαιρέστε παλιά runtimes προσομοιωτών και καθαρίστε archives, DeviceSupport και cache πακέτων στο Mac.

Τι είναι το DerivedData και γιατί γίνεται τεράστιο

Το DerivedData είναι το σημείο όπου το Xcode κρατά ό,τι παράγει από τον πηγαίο κώδικά σας: ενδιάμεσα αντικείμενα build, μεταγλωττισμένα προϊόντα, cache των modules, ευρετήρια συμβόλων για την αυτόματη συμπλήρωση κώδικα και τη μετάβαση στον ορισμό, καθώς και αρχεία καταγραφής build. Από προεπιλογή βρίσκεται στο ~/Library/Developer/Xcode/DerivedData, με έναν υποφάκελο για κάθε project ή workspace που έχετε ανοίξει ποτέ.

Μεγαλώνει για δομικό λόγο: το Xcode δημιουργεί έναν φάκελο DerivedData για κάθε project που ανοίγετε — ακόμη και για κλώνους που κάνατε build μία φορά και δεν ξανανοίξατε — και δεν σβήνει κανέναν από αυτούς από μόνο του. Κάθε φάκελος κρατά ξεχωριστά προϊόντα build ανά διαμόρφωση και προορισμό (Debug και Release, προσομοιωτής και συσκευή), γι' αυτό μετρήστε τους υποφακέλους των projects αντί να υποθέτετε πόσο χώρο θα ανακτήσει το δικό σας Mac.

Ό,τι περιέχει μπορεί εξ ορισμού να δημιουργηθεί ξανά — αυτό ακριβώς σημαίνει «derived» (παραγόμενο). Η διαγραφή του DerivedData δεν αγγίζει ποτέ τον πηγαίο κώδικα, τις ρυθμίσεις του project ή οτιδήποτε βρίσκεται σε έλεγχο εκδόσεων. Το μόνο κόστος είναι ο χρόνος: το επόμενο build κάθε project είναι πλήρες, καθαρό build και η ευρετηρίαση τρέχει ξανά στο παρασκήνιο για μερικά λεπτά.

Διαγράψτε το DerivedData

Η εντολή Clean Build Folder του Xcode (Product > Clean Build Folder ή Shift-Command-K) καθαρίζει μόνο τα προϊόντα build του project που είναι ανοιχτό — χρήσιμη για να διορθώσετε ένα παράξενο build, αλλά σχεδόν δεν αλλάζει τον ελεύθερο χώρο. Για να ανακτήσετε πραγματικό χώρο, διαγράψτε τους ίδιους τους φακέλους του DerivedData: εμφανίστε τους από τις ρυθμίσεις Locations του Xcode ή μεταβείτε στον φάκελο από το Finder ή αφαιρέστε τους από το Τερματικό. Και οι τρεις τρόποι καταλήγουν στο ίδιο αποτέλεσμα.

Η διαγραφή ανά project είναι η στοχευμένη επιλογή: κρατήστε το DerivedData για τα δύο-τρία projects που κάνετε build καθημερινά και αφαιρέστε τους φακέλους όλων των υπολοίπων. Η διαγραφή ολόκληρου του φακέλου είναι η γρήγορη επιλογή και είναι κι αυτή αποδεκτή — απλώς πληρώνετε το κόστος του πλήρους build σε όλα τα projects μαζί.

  1. Τερματίστε πρώτα το Xcode. Αν διαγράψετε το DerivedData ενώ το Xcode εκτελείται, ο indexer του μπορεί να μπερδευτεί και αρχεία που έχει ανοιχτά το Xcode ενδέχεται να μη διαγραφούν σωστά.
  2. Βρείτε τον φάκελο: στο Xcode ανοίξτε το Settings > Locations και κάντε κλικ στο μικρό βέλος δίπλα στη διαδρομή του DerivedData για να εμφανιστεί στο Finder. Εναλλακτικά, στο Finder πατήστε Command-Shift-G και πληκτρολογήστε απευθείας ~/Library/Developer/Xcode/DerivedData.
  3. Ταξινομήστε τους υποφακέλους των projects κατά μέγεθος, επιλέξτε όσους θέλετε να αφαιρέσετε (ή πατήστε Command-A για όλους) και μετακινήστε τους στον Κάδο. Η μετακίνηση πρώτα στον Κάδο είναι η ασφαλέστερη συνήθεια — αν αλλάξετε γνώμη, τους επαναφέρετε αμέσως.
  4. Εναλλακτικά από το Τερματικό: η εντολή rm -rf ~/Library/Developer/Xcode/DerivedData διαγράφει τα πάντα μονομιάς. Για πολύ μεγάλους φακέλους είναι ταχύτερη από το Finder, αλλά διαβάστε τη σημείωση παρακάτω πριν τη χρησιμοποιήσετε.
  5. Ανοίξτε ξανά το Xcode και κάντε build. Το πρώτο build κάθε project θα διαρκέσει αισθητά περισσότερο και το «Indexing» θα τρέχει για λίγο στη γραμμή δραστηριότητας — και τα δύο είναι κόστη μίας φοράς.

Προσοχή με την εντολή rm -rf: παρακάμπτει τον Κάδο και διαγράφει οριστικά, χωρίς δυνατότητα αναίρεσης. Πληκτρολογήστε τη διαδρομή ακριβώς, μην την εκτελέσετε ποτέ με sudo για αυτή τη δουλειά και, αν δεν νιώθετε άνετα στο Τερματικό, ο δρόμος μέσω Finder κάνει την ίδια δουλειά με δυνατότητα επαναφοράς.

Καθαρίστε παλιά runtimes προσομοιωτών

Οι προσομοιωτές είναι συχνά άλλη μία μεγάλη κατηγορία χώρου για προγραμματιστές. Κάθε runtime iOS, watchOS ή tvOS που έχετε κατεβάσει πιάνει τον δικό του χώρο και κάθε προσομοιωμένη συσκευή κρατά δεδομένα στο ~/Library/Developer/CoreSimulator/Devices. Αν έχετε περάσει από μερικές αναβαθμίσεις του Xcode, ελέγξτε τα runtimes για εκδόσεις συστήματος που δεν δοκιμάζετε πια.

Το γρηγορότερο κέρδος είναι η ενσωματωμένη εντολή καθαρισμού: εκτελέστε xcrun simctl delete unavailable στο Τερματικό. Διαγράφει κάθε συσκευή προσομοιωτή με την ένδειξη unavailable — κυρίως ορφανές συσκευές των οποίων το runtime αφαιρέθηκε ή που άφησε πίσω του κάποιο παλιό Xcode — μαζί με τις εφαρμογές και τα δεδομένα τους. Ελέγξτε πρώτα τη λίστα με xcrun simctl list devices, ειδικά αν έχετε εγκατεστημένες περισσότερες από μία εκδόσεις του Xcode.

Για τα ίδια τα runtimes, ανοίξτε στο Xcode το Settings > Components (στο Xcode 14–15 ονομάζεται Platforms). Θα δείτε κάθε εγκατεστημένο 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 που περιέχουν σας επιτρέπουν να συμβολοποιείτε (symbolicate) τις αναφορές crash ακριβώς εκείνου του build. Κρατήστε τα archives των εκδόσεων που είναι ακόμη διαθέσιμες στο App Store ή στο TestFlight (ή βεβαιωθείτε ότι το App Store Connect έχει τα dSYM) και διαγράψτε τα υπόλοιπα — ο ασφαλέστερος δρόμος είναι το Organizer του Xcode (Window > Organizer > Archives), όπου τα εξετάζετε και τα διαγράφετε βλέποντας έκδοση και αριθμό build.

Το 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 του CoreSimulator δεν αναγνωρίζετε.

Cache διαχειριστών πακέτων (SwiftPM, CocoaPods, npm, Homebrew)

Οι διαχειριστές πακέτων κρατούν τις εξαρτήσεις που κατεβάζουν, ώστε οι επόμενες εγκαταστάσεις να είναι γρήγορες. Αυτό είναι χρήσιμο, αλλά σε ένα μηχάνημα με projects πολλών ετών μπορεί να γίνει μεγάλη κατηγορία στον δίσκο. Αυτές οι cache λήψεων μπορούν να αναδημιουργηθούν, όμως η επόμενη εγκατάσταση θα χρειαστεί να κατεβάσει ξανά τα πακέτα.

Ο Swift Package Manager αποθηκεύει τα κατεβασμένα πακέτα στο ~/Library/Caches/org.swift.swiftpm, ενώ τα checkouts των επιλυμένων εξαρτήσεων κάθε project βρίσκονται μέσα στον φάκελο DerivedData του — οπότε ο καθαρισμός του DerivedData τα αφαιρεί ήδη. Την κοινόχρηστη cache μπορείτε να τη διαγράψετε από το Finder ή με rm -rf σε εκείνη τη διαδρομή.

Το CocoaPods κρατά τα κατεβασμένα pods σε cache στο ~/Library/Caches/CocoaPods. Ο σωστός τρόπος να την αδειάσετε είναι η ενσωματωμένη εντολή pod cache clean --all. Οι φάκελοι Pods των projects σας μένουν ανέγγιχτοι· φεύγει μόνο η cache λήψεων.

Η cache του npm βρίσκεται στο ~/.npm και σε ένα μηχάνημα με πολλή δουλειά σε JavaScript μπορεί να φτάσει πολλά gigabytes. Εκτελέστε npm cache clean --force για να την αδειάσετε (το npm απαιτεί το --force επειδή η cache διορθώνεται μόνη της και κανονικά δεν χρειάζεται ποτέ καθάρισμα· η διαγραφή της είναι ασφαλής — τα πακέτα απλώς κατεβαίνουν ξανά στην επόμενη εγκατάσταση). Οι χρήστες του pnpm μπορούν αντί γι' αυτό να εκτελέσουν pnpm store prune.

Το Homebrew μαζεύει παλιές λήψεις και παρωχημένες εκδόσεις πακέτων. Το brew cleanup αφαιρεί παρωχημένες εκδόσεις και παλιές λήψεις, ενώ όταν εκτελείται για όλα τα πακέτα απεγκαθιστά επίσης εξαρτήσεις που δεν χρειάζεται πια κανένα πακέτο (εκτός αν έχει οριστεί το HOMEBREW_NO_AUTOREMOVE)· το brew cleanup --prune=all αδειάζει επιπλέον ολόκληρη την cache λήψεων. Εκτελέστε πρώτα brew cleanup -n αν θέλετε μια δοκιμαστική λίστα με όσα θα αφαιρεθούν.

Αυτοματοποιήστε το

Όλα τα παραπάνω λειτουργούν, αλλά τα άχρηστα αρχεία ανάπτυξης είναι ατέρμονος κύκλος: το DerivedData επιστρέφει μέσα σε μια εβδομάδα κανονικής δουλειάς, οι cache ξαναγεμίζουν και κάθε ενημέρωση του Xcode αφήνει πίσω της άλλο ένα ορφανό runtime. Αν προτιμάτε να μην επαναλαμβάνετε έξι χειροκίνητες διαδικασίες κάθε μήνα, αυτό είναι το κομμάτι που αξίζει να αυτοματοποιήσετε — με ένα εργαλείο που εξηγεί το σκεπτικό του αντί να διαγράφει σιωπηλά και μαζικά.

Το AskClean αντιμετωπίζει τα αρχεία ανάπτυξης ως ξεχωριστές κατηγορίες: μία σάρωση αναλύει το Xcode DerivedData ανά project, τα παλιά runtimes προσομοιωτών (τα διαβάζει μέσω simctl και κρατά το νεότερο ανά πλατφόρμα), τα αρχεία υποστήριξης συσκευών και τις cache διαχειριστών πακέτων για npm, SwiftPM, cargo, uv και άλλα. Εντοπίζει και τους νεότερους καταναλωτές χώρου, τα τοπικά μοντέλα AI: τα μοντέλα Hugging Face εμφανίζονται ένα προς ένα και η βιβλιοθήκη μοντέλων του Ollama ως ενιαίο στοιχείο, όλα μη επιλεγμένα από προεπιλογή.

Κάθε στοιχείο συνοδεύεται από εξήγηση — τι είναι, αν μπορεί να δημιουργηθεί ξανά, τι κοστίζει η διαγραφή του — και τίποτα δεν εκτελείται πριν το επιβεβαιώσετε. Τα επιβεβαιωμένα στοιχεία διαγράφονται οριστικά και δεν μετακινούνται στον Κάδο, γι' αυτό ελέγξτε κάθε επιλογή πριν την επιβεβαιώσετε· ο πηγαίος κώδικας και η βιβλιοθήκη φωτογραφιών σας δεν αγγίζονται ποτέ. Είναι η ίδια λίστα ελέγχου με αυτόν τον οδηγό, χωρίς την ώρα δουλειάς στο Τερματικό.

Τι δημιουργείται ξανά — και τι όχι

Ο πίνακας δείχνει πού σταματά η ασφαλής διαγραφή· δεν υπόσχεται συγκεκριμένη εξοικονόμηση χώρου. Μετρήστε το Mac σας πριν και μετά από κάθε ενέργεια — το script ελέγχου μόνο για ανάγνωση του οδηγού για τον χώρο των προσομοιωτών Xcode καταγράφει αυτούς τους φακέλους χωρίς να αλλάζει τίποτα.

ΚατηγορίαΠροεπιλεγμένη θέσηΣυνέπεια διαγραφής
DerivedData~/Library/Developer/Xcode/DerivedDataΓίνεται ξανά build και ευρετηρίαση· ο πηγαίος κώδικας και το ιστορικό git μένουν ανέγγιχτα.
Συσκευές προσομοιωτή~/Library/Developer/CoreSimulator/DevicesΧάνονται οι εφαρμογές και τα δεδομένα δοκιμών των επιλεγμένων εικονικών συσκευών· διαγράψτε τις μέσω simctl ή Xcode.
Archives~/Library/Developer/Xcode/ArchivesΜπορεί να χαθούν dSYM που χρειάζονται για τη συμβολοποίηση των crash· ελέγξτε τα πρώτα στο Organizer.
DeviceSupport~/Library/Developer/Xcode/iOS DeviceSupportΤα σύμβολα αποσφαλμάτωσης αντιγράφονται ξανά όταν συνδεθεί συσκευή με εκείνη την έκδοση συστήματος.

Συχνές ερωτήσεις

Είναι ασφαλές να διαγράψω το DerivedData;

Ναι — είναι από τις ασφαλέστερες μεγάλες διαγραφές σε ένα Mac. Το DerivedData περιέχει μόνο αρχεία που παράγει το Xcode από τον πηγαίο κώδικά σας: προϊόντα build, cache των modules, ευρετήρια και αρχεία καταγραφής. Ο κώδικας, τα αρχεία του project και το ιστορικό git βρίσκονται αλλού και δεν επηρεάζονται ποτέ. Η μόνη συνέπεια είναι ότι το επόμενο build κάθε project είναι πλήρες και η ευρετηρίαση τρέχει ξανά.

Πόσο συχνά πρέπει να καθαρίζω το DerivedData;

Δεν υπάρχει υποχρεωτικό πρόγραμμα — καθαρίστε το όταν μεγαλώσει αρκετά ώστε να έχει σημασία, που για τους περισσότερους ενεργούς προγραμματιστές σημαίνει κάθε έναν-δύο μήνες. Δύο περιστάσεις το δικαιολογούν πάντα: όταν χρειάζεστε γρήγορα χώρο στον δίσκο και όταν ένα project βγάζει ανεξήγητα σφάλματα build ή παρωχημένη αυτόματη συμπλήρωση· εκεί το σβήσιμο του DerivedData είναι η καθιερωμένη πρώτη λύση.

Θα είναι πιο αργό το Xcode αφού διαγράψω το DerivedData;

Προσωρινά, ναι. Το πρώτο build κάθε project είναι καθαρό build και μπορεί να διαρκέσει αρκετές φορές περισσότερο από ένα σταδιακό (incremental), ενώ η ευρετηρίαση στο παρασκήνιο χρειάζεται μερικά λεπτά μέχρι να επανέλθουν πλήρως η αυτόματη συμπλήρωση και η αναζήτηση. Μετά από αυτόν τον πρώτο κύκλο η απόδοση είναι ακριβώς όπως πριν — το DerivedData κρατά cache, όχι βελτιστοποιήσεις που χάνονται οριστικά.

Και το ~/Library/Developer/CoreSimulator; Μπορώ να το διαγράψω;

Όχι στα τυφλά — περιέχει τους εγκατεστημένους προσομοιωτές σας και τα δεδομένα τους, και αν το διαγράψετε ολόκληρο θα σταματήσουν να λειτουργούν μέχρι να εγκαταστήσετε ξανά runtimes. Καθαρίστε το σωστά: εκτελέστε xcrun simctl delete unavailable για τις ορφανές συσκευές (διαγράφονται μαζί τους οι εφαρμογές και τα δεδομένα τους), αφαιρέστε παλιά runtimes από το Settings > Components του Xcode, διαγράψτε αχρησιμοποίητες συσκευές από το Devices and Simulators και καθαρίστε με το χέρι μόνο τον υποφάκελο Caches, με το Xcode και το Simulator κλειστά.

Κάνει το ίδιο το Clean Build Folder;

Όχι. Το Product > Clean Build Folder (Shift-Command-K) καθαρίζει τα προϊόντα build μόνο του τρέχοντος project και αφήνει στη θέση τους τα ευρετήρια, την cache των modules και τους φακέλους όλων των άλλων projects. Είναι εργαλείο για προβλήματα build, όχι για χώρο στον δίσκο — για να ανακτήσετε πραγματικό χώρο πρέπει να διαγράψετε τους ίδιους τους φακέλους του DerivedData.

Πηγές

Ο χώρος ανάπτυξης, βήμα προς βήμα