AskClean

Πώς να καθαρίσετε με ασφάλεια την 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 για διαγραφή.

Γράφημα εξαρτήσεων με ενεργά πακέτα Swift, χωριστά από διπλά επίπεδα cache
Επιλέξτε τον στενότερο καθαρισμό του SwiftPM: πρώτα τα τεχνουργήματα build του project και τις κοινόχρηστες λήψεις μόνο όταν είναι αυτές η αιτία.

Το 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 μπορεί να χρειαστεί δίκτυο και περισσότερο χρόνο σε πολλά αποθετήρια.

  1. Κάντε commit ή stash τις αλλαγές σας και επιβεβαιώστε ότι τα Package.swift και Package.resolved βρίσκονται εκεί που τα περιμένει το project.
  2. Από τη ρίζα του package εκτελέστε swift package clean και δοκιμάστε ξανά το αρχικό build.
  3. Αν το τοπικό workspace του package παραμένει ασυνεπές, εκτελέστε swift package reset και κάντε ξανά επίλυση και build.
  4. Εκτελέστε swift package purge-cache μόνο αν η κοινόχρηστη cache αποθετηρίων είναι υπερβολικά μεγάλη ή κατεστραμμένη.
  5. Επαληθεύστε το γράφημα εξαρτήσεων και το 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;

Όχι για συνηθισμένο καθαρισμό: καταγράφει τις επιλυμένες εκδόσεις και η διαγραφή του μπορεί να αλλάξει όσες επιλεγούν την επόμενη φορά. Αφαιρέστε το μόνο αν θέλετε σκόπιμα νέα επίλυση.

Πηγές

Περισσότεροι οδηγοί αποθήκευσης για προγραμματιστές