Πώς να καθαρίσετε με ασφάλεια την cache του Swift Package Manager
Ομάδα AskClean · Ενημερώθηκε 2026-11-02
Χρησιμοποιήστε το swift package clean για τα τεχνουργήματα build ενός project, το swift package reset για ολόκληρη την cache και τον φάκελο build του package και το swift package purge-cache μόνο για την κοινόχρηστη cache αποθετηρίων του SwiftPM. Κρατήστε τα Package.swift και Package.resolved: ορίζουν τις εξαρτήσεις και δεν είναι cache για διαγραφή.

Το SwiftPM έχει περισσότερες από μία cache
Ένα package γραμμής εντολών κρατά checkouts, αποθετήρια, προϊόντα build και την κατάσταση του workspace στον φάκελο .build, ενώ το SwiftPM διατηρεί και μια κοινόχρηστη cache αποθετηρίων, ώστε τα projects να μην κατεβάζουν κάθε φορά τις ίδιες εξαρτήσεις. Το Xcode συνδέει συνήθως τα checkouts και τα προϊόντα των packages με το DerivedData του project. Καθαρίστε το στενότερο επίπεδο που εξηγεί το πρόβλημα.
Επιλέξτε την εντολή με βάση το εύρος
Το swift package clean αφαιρεί τα τεχνουργήματα build του τρέχοντος package. Το reset είναι ευρύτερο: επαναφέρει ολόκληρη την cache και τον φάκελο build του package, οπότε εξαρτήσεις και κατάσταση workspace προετοιμάζονται ξανά. Το purge-cache αδειάζει την καθολική cache αποθετηρίων που μοιράζονται τα projects, οπότε η επόμενη επίλυση ή το επόμενο build μπορεί να χρειαστεί δίκτυο και περισσότερο χρόνο σε πολλά αποθετήρια.
- Κάντε commit ή stash τις αλλαγές σας και επιβεβαιώστε ότι τα Package.swift και Package.resolved βρίσκονται εκεί που τα περιμένει το project.
- Από τη ρίζα του package εκτελέστε swift package clean και δοκιμάστε ξανά το αρχικό build.
- Αν το τοπικό workspace του package παραμένει ασυνεπές, εκτελέστε swift package reset και κάντε ξανά επίλυση και build.
- Εκτελέστε swift package purge-cache μόνο αν η κοινόχρηστη cache αποθετηρίων είναι υπερβολικά μεγάλη ή κατεστραμμένη.
- Επαληθεύστε το γράφημα εξαρτήσεων και το build πριν καθαρίσετε DerivedData του Xcode.
Οι διαθέσιμες υποεντολές εξαρτώνται από το εγκατεστημένο toolchain της Swift· εκτελέστε swift package --help για να τις επιβεβαιώσετε σε αυτό το Mac.
Κρατήστε το Package.resolved, εκτός αν θέλετε νέες εκδόσεις
Το Package.resolved καταγράφει τις εκδόσεις που επιλύθηκαν. Αν το διαγράψετε, η επόμενη επίλυση μπορεί να επιλέξει άλλες εκδόσεις που επιτρέπει το Package.swift και ο καθαρισμός να γίνει σιωπηλά αναβάθμιση εξαρτήσεων. Τα Package.swift, Sources, Tests, plugins και οι τοπικές εξαρτήσεις είναι πηγαίος κώδικας, όχι cache.
Τα packages του Xcode θέλουν χωριστή αντιμετώπιση
Αν το πρόβλημα εμφανίζεται μόνο στο Xcode, δοκιμάστε το File > Packages > Reset Package Caches και μετά το File > Packages > Resolve Package Versions (τα ονόματα των μενού διαφέρουν ανά έκδοση) ή διαγράψτε μόνο τον φάκελο DerivedData εκείνου του project. Για έλλειψη χώρου, μετρήστε τους φακέλους .build πριν από οποιοδήποτε καθολικό purge. Το AskClean δείχνει ποια κατηγορία πιάνει χώρο· το εύρος του καθαρισμού το ορίζουν οι εντολές της Swift.
Σύγκριση αποφάσεων και κινδύνων
Καθαρίστε με ασφάλεια την cache του Swift Package Manager (SPM): πότε χρειάζεται swift package clean, reset ή purge-cache και γιατί κρατάτε το Package.resolved.
| Απόφαση | Πού να ελέγξετε | Όριο ασφάλειας |
|---|---|---|
| Το SwiftPM έχει περισσότερες από μία cache | .build / DerivedData / cache αποθετηρίων | Ένα package γραμμής εντολών κρατά checkouts, αποθετήρια, προϊόντα build και την κατάσταση του workspace στον φάκελο .build, ενώ το SwiftPM διατηρεί και μια κοινόχρηστη cache αποθετηρίων, ώστε τα projects να μην κατεβάζουν κάθε φορά τις ίδιες εξαρτήσεις. |
| Επιλέξτε την εντολή με βάση το εύρος | swift package clean / reset / purge-cache | Το swift package clean αφαιρεί τα τεχνουργήματα build του τρέχοντος package. |
| Κρατήστε το Package.resolved, εκτός αν θέλετε νέες εκδόσεις | Package.swift / Package.resolved | Το Package.resolved καταγράφει τις εκδόσεις που επιλύθηκαν. |
| Τα packages του Xcode θέλουν χωριστή αντιμετώπιση | File > Packages / DerivedData | Αν το πρόβλημα εμφανίζεται μόνο στο Xcode, δοκιμάστε το File > Packages > Reset Package Caches και μετά το File > Packages > Resolve Package Versions (τα ονόματα των μενού διαφέρουν ανά έκδοση) ή διαγράψτε μόνο τον φάκελο DerivedData εκείνου του project. |
Συχνές ερωτήσεις
Τι διαγράφει το swift package clean;
Τα τεχνουργήματα build του τρέχοντος package· το επόμενο build τα δημιουργεί ξανά. Δεν διαγράφει το Package.swift και δεν αλλάζει τις απαιτήσεις των εξαρτήσεων.
Είναι ίδια τα reset και purge-cache;
Όχι. Το reset αφορά ολόκληρη την cache και τον φάκελο build του τρέχοντος package· το purge-cache αφορά την κοινόχρηστη cache αποθετηρίων του SwiftPM και επηρεάζει τις μελλοντικές λήψεις όλων των projects.
Να διαγράψω το Package.resolved;
Όχι για συνηθισμένο καθαρισμό: καταγράφει τις επιλυμένες εκδόσεις και η διαγραφή του μπορεί να αλλάξει όσες επιλεγούν την επόμενη φορά. Αφαιρέστε το μόνο αν θέλετε σκόπιμα νέα επίλυση.
Πηγές