Xcode Clean Build Folder ή διαγραφή του DerivedData;
Ομάδα AskClean · Ενημερώθηκε 2026-11-02
Το Clean Build Folder καθαρίζει τα προϊόντα build του scheme που έχετε ανοιχτό. Η διαγραφή του DerivedData επαναφέρει κάτι ευρύτερο: τα προϊόντα build μαζί με τα ευρετήρια, την cache των modules και τα αρχεία καταγραφής. Για χαλασμένο build ξεκινήστε με το Clean Build Folder· για κατεστραμμένο ευρετήριο διαγράψτε τον φάκελο DerivedData μόνο εκείνου του project· για πραγματικό χώρο στον δίσκο διαγράψτε τους φακέλους DerivedData των projects που δεν κάνετε πια build.
Η διαφορά είναι το εύρος, όχι το πόσο «βαθιά» καθαρίζουν
Το Product > Clean Build Folder (Shift-Command-K) λειτουργεί μέσα στο project και στο scheme που έχετε ανοιχτά εκείνη τη στιγμή. Πετά τα μεταγλωττισμένα προϊόντα και τα ενδιάμεσα αρχεία αυτού του περιβάλλοντος, ώστε το επόμενο build να ξεκινήσει από τον πηγαίο κώδικα. Περιορίζεται σε ένα project και κρατά σκόπιμα όσα κοστίζουν ακριβά να δημιουργηθούν ξανά.
Το DerivedData είναι ο φάκελος ανώτατου επιπέδου που μοιράζονται όλα τα projects με την προεπιλεγμένη θέση — το ~/Library/Developer/Xcode/DerivedData, με έναν υποφάκελο για κάθε project ή workspace που έχετε ανοίξει ποτέ. Η διαγραφή ενός υποφακέλου επαναφέρει μόνο εκείνο το project. Αν διαγράψετε ολόκληρο τον φάκελο, όλα τα projects σας θα χρειαστούν νέο build και νέα ευρετηρίαση την επόμενη φορά που θα τα ανοίξετε.
Γι' αυτό δεν έχει νόημα να τα περιγράφουμε ως «ελαφρύ» και «βαθύ» καθαρισμό. Το Clean Build Folder είναι στενό και φθηνό· η διαγραφή του DerivedData είναι ευρεία και σας κοστίζει το ευρετήριο. Το ποιο ταιριάζει εξαρτάται αποκλειστικά από το αν αυτό που χάλασε βρίσκεται μέσα στα προϊόντα build ή έξω από αυτά.
Όταν χαλάσει το build, ξεκινήστε με τη στενότερη λύση
Αν το σφάλμα εμφανίστηκε αμέσως αφού αλλάξατε branch, τροποποιήσατε μια διαμόρφωση build ή επεξεργαστήκατε αρχεία πόρων, τερματίστε την εφαρμογή που εκτελείται και χρησιμοποιήστε πρώτα το Clean Build Folder. Είναι η φθηνότερη επαναφορά που υπάρχει, διατηρεί το ευρετήριο και σας επιστρέφει στη δουλειά μετά από ένα build, όχι μετά από ένα build συν αρκετά λεπτά ευρετηρίασης.
Προχωρήστε στη διαγραφή του φακέλου DerivedData αυτού του project όταν τα συμπτώματα δεν έχουν στην πραγματικότητα σχέση με τα προϊόντα build: το Xcode δείχνει σφάλματα για κώδικα που έχετε ήδη διορθώσει, η μετάβαση στον ορισμό (Jump to Definition) σας πηγαίνει σε λάθος σημείο, η αυτόματη συμπλήρωση έχει πάψει να αναγνωρίζει τους δικούς σας τύπους. Αυτά είναι συμπτώματα του ευρετηρίου, και το Clean Build Folder δεν αγγίζει το ευρετήριο.
Υπάρχει μία συγκεκριμένη περίπτωση που αξίζει να γνωρίζετε, γιατί είναι ο συνηθισμένος λόγος που το «έκανα clean και δεν βοήθησε» γίνεται «διέγραψα το DerivedData και βοήθησε»: η cache των προμεταγλωττισμένων modules (ModuleCache.noindex) βρίσκεται στη ρίζα του DerivedData, όχι μέσα στον υποφάκελο κάποιου project. Το Clean Build Folder δεν φτάνει ποτέ εκεί. Όταν η cache των modules μείνει παρωχημένη μετά από αλλαγή SDK ή toolchain, μόνο η αφαίρεσή της εξαφανίζει το σφάλμα.
Καμία από τις δύο ενέργειες δεν διορθώνει ένα πραγματικό σφάλμα στον κώδικα ή στις εξαρτήσεις σας. Αν το ίδιο ακριβώς σφάλμα επιμένει και μετά από καθαρό build, σταματήστε τους καθαρισμούς και διαβάστε το μήνυμα του μεταγλωττιστή — η αιτία βρίσκεται στις ρυθμίσεις του project, στο Package.resolved, στο επιλεγμένο SDK ή στον ίδιο τον κώδικα.
Κανένα από τα δύο δεν είναι στρατηγική για ελεύθερο χώρο
Το Clean Build Folder είναι διαγνωστικό εργαλείο που απλώς τυχαίνει να ελευθερώνει μερικά bytes. Μπορεί να αποδώσει χώρο από το τρέχον project, αλλά τα προϊόντα build όλων των άλλων projects, όλα τα ευρετήρια και η cache των modules μένουν ακριβώς εκεί που ήταν. Αν το εκτελείτε για να κερδίσετε χώρο, μετράτε το λάθος πράγμα.
Αν ο πραγματικός στόχος είναι ο χώρος, κάντε το αντίστροφο: μετρήστε πρώτα τους υποφακέλους του DerivedData και μετά διαγράψτε εκείνους των projects που δεν έχετε ανοίξει εδώ και μήνες. Εκεί βρίσκονται συνήθως οι δεκάδες gigabytes — σε κλώνους που κάνατε build μία φορά και δεν ξαναγυρίσατε ποτέ.
Μην ξεκινάτε με rm -rf. Από το Finder μπορείτε να μετακινήσετε τους επιλεγμένους φακέλους στον Κάδο, απ' όπου ανακτώνται μέχρι να τον αδειάσετε — και αυτή η διαφορά μετράει την πρώτη φορά που θα σβήσετε τον φάκελο ενός project που, όπως αποδεικνύεται, κάνει build εκείνη ακριβώς τη στιγμή. Το Τερματικό αξίζει για αυτοματοποίηση, αλλά μόνο αφού επιβεβαιώσετε την ακριβή διαδρομή.
Ελέγξτε το αποτέλεσμα αντί να βασίζεστε σε έναν αριθμό
Καταγράψτε το μέγεθος του DerivedData πριν κάνετε οτιδήποτε, εφαρμόστε μόνο μία από τις δύο επιλογές και μετρήστε ξανά. Μετά το Clean Build Folder, κάντε build το τρέχον scheme. Μετά τη διαγραφή ενός φακέλου DerivedData, ανοίξτε το Xcode και περιμένετε να ολοκληρωθούν το πρώτο build και η ευρετηρίαση.
Με αυτή τη σειρά ξεχωρίζετε τον χώρο που κερδίσατε από το τίμημα που πληρώσατε γι' αυτόν. Δεν υπάρχει ένας αριθμός που ισχύει για όλους: το αποτέλεσμα εξαρτάται από το πόσα projects, διαμορφώσεις και αρχιτεκτονικές έχουν γίνει build στο συγκεκριμένο Mac.
Ποιο να επιλέξετε
| Κατάσταση | Τι να κάνετε | Κόστος επαναφοράς |
|---|---|---|
| Το build αποτυγχάνει στο τρέχον scheme | Product > Clean Build Folder | Ένα νέο build αυτού του project. Τα ευρετήρια όλων των projects διατηρούνται. |
| Σφάλματα που δεν φεύγουν, χαλασμένη μετάβαση στον ορισμό | ~/Library/Developer/Xcode/DerivedData/<project> | Πλήρες build και νέα ευρετηρίαση, μόνο για αυτό το project. |
| Τα σφάλματα επιμένουν μετά το Clean Build Folder, έπειτα από αλλαγή SDK | ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex | Τα modules μεταγλωττίζονται ξανά στο επόμενο build. Το Clean Build Folder δεν φτάνει εδώ. |
| Χρειάζεστε πραγματικά χώρο στον δίσκο | ~/Library/Developer/Xcode/DerivedData | Διαγράψτε τους μεγάλους, παρωχημένους υποφακέλους· αυτά τα projects θα χρειαστούν νέο build όταν τα ανοίξετε. |
| Παλιά runtimes προσομοιωτών | Xcode Settings > Components | Εντελώς ξεχωριστή κατηγορία. Καμία από τις δύο ενέργειες δεν την αγγίζει. |
Ο πίνακας περιγράφει το εύρος κάθε ενέργειας, όχι έναν εγγυημένο αριθμό gigabytes. Μετρήστε το δικό σας Mac πριν και μετά.
Συχνές ερωτήσεις
Διαγράφει το Clean Build Folder το DerivedData;
Όχι. Καθαρίζει τα προϊόντα build του project και του scheme που έχετε ανοιχτά. Δεν ισοδυναμεί με διαγραφή του κοινόχρηστου φακέλου DerivedData, που περιέχει επίσης τα ευρετήρια, την cache των modules και τα αρχεία καταγραφής όλων των projects.
Είναι ασφαλές να διαγράψω τον φάκελο DerivedData ενός project;
Ναι. Όλο το περιεχόμενό του παράγεται από τον πηγαίο κώδικά σας και το Xcode το δημιουργεί ξανά. Ο κώδικας και το ιστορικό git δεν επηρεάζονται. Το μόνο κόστος είναι ότι το πρώτο build μετά τη διαγραφή είναι πλήρες και ακολουθεί ευρετηρίαση.
Πρέπει να τερματίσω πρώτα το Xcode;
Για χειροκίνητη διαγραφή του DerivedData, ναι — έτσι ο indexer δεν κρατά ανοιχτά ούτε ξαναδημιουργεί αρχεία ενώ τα αφαιρείτε. Για την ενσωματωμένη εντολή Clean Build Folder, όχι· είναι το ίδιο το Xcode που καθαρίζει τα δικά του αρχεία.
Γιατί το σφάλμα παραμένει μετά τον καθαρισμό;
Το πιθανότερο είναι ότι η αιτία δεν ήταν ποτέ η cache. Ελέγξτε το μήνυμα του μεταγλωττιστή, τις ρυθμίσεις του scheme, τις εκδόσεις των εξαρτήσεων, το Package.resolved, το επιλεγμένο SDK και τι άλλαξε πραγματικά στο τρέχον branch.
Το Clean Build Folder δεν βοήθησε, αλλά η διαγραφή του DerivedData το διόρθωσε. Γιατί;
Συνήθως φταίει η cache των προμεταγλωττισμένων modules. Το ModuleCache.noindex βρίσκεται στη ρίζα του DerivedData και όχι στον υποφάκελο κάποιου project, οπότε το Clean Build Folder δεν μπορεί να το φτάσει — η διαγραφή του DerivedData όμως το αφαιρεί.
Πηγές