AskClean

Cách xóa bộ nhớ đệm Swift Package Manager (SPM) an toàn

Đội ngũ AskClean · Cập nhật 2026-11-02

Dùng swift package clean cho sản phẩm build của một dự án, swift package reset để đặt lại toàn bộ bộ nhớ đệm và thư mục build của gói đó, và swift package purge-cache cho bộ nhớ đệm repository dùng chung của SwiftPM. Hãy giữ Package.swift và Package.resolved: hai tệp này xác định phần phụ thuộc, không phải bộ nhớ đệm để xóa.

Đồ thị phần phụ thuộc với các khối gói Swift đang dùng, tách khỏi các lớp bộ nhớ đệm trùng lặp
Chọn cách dọn SwiftPM có phạm vi hẹp nhất: sản phẩm build của dự án trước, phần tải về dùng chung chỉ khi chính nó gây ra vấn đề.

SwiftPM có nhiều lớp bộ nhớ đệm

Một gói chạy bằng dòng lệnh thường có thư mục .build chứa checkout, repository, đầu ra build và trạng thái workspace; SwiftPM còn giữ một bộ nhớ đệm repository dùng chung để nhiều dự án không phải tải lại cùng một phần phụ thuộc. Xcode thêm một lớp nữa: checkout và sản phẩm build của gói thường gắn với DerivedData của dự án. Hãy dọn lớp hẹp nhất giải thích được triệu chứng — cách này khôi phục nhanh hơn và không làm chậm các kho mã khác.

Chọn lệnh theo phạm vi

swift package clean xóa sản phẩm build của gói hiện tại — lựa chọn đầu tiên khi đầu ra biên dịch bị cũ hoặc khi chỉ muốn dọn một kho mã. swift package reset rộng hơn: đặt lại toàn bộ bộ nhớ đệm và thư mục build của gói, buộc phần phụ thuộc và trạng thái workspace được chuẩn bị lại. swift package purge-cache xóa bộ nhớ đệm repository toàn cục dùng chung cho nhiều dự án, nên lần phân giải sau có thể cần mạng và lâu hơn; đừng biến nó thành thói quen trước mỗi lần build.

  1. Commit hoặc stash thay đổi, rồi xác nhận Package.swift và Package.resolved vẫn ở đúng chỗ dự án cần.
  2. Từ thư mục gốc của gói, chạy swift package clean rồi thử lại lần build bị lỗi.
  3. Nếu workspace cục bộ của gói vẫn không nhất quán, chạy swift package reset, rồi phân giải và build lại.
  4. Chỉ chạy swift package purge-cache khi bộ nhớ đệm dùng chung thực sự quá lớn hoặc bị hỏng.
  5. Kiểm tra đồ thị phần phụ thuộc và chạy test trước khi dọn DerivedData của Xcode.

Chạy swift package --help để xem lệnh con nào được hỗ trợ; điều này phụ thuộc vào phiên bản toolchain Swift đã cài.

Giữ Package.resolved, trừ khi muốn đổi phiên bản

Package.resolved ghi lại phiên bản phần phụ thuộc đã phân giải, không phải bộ nhớ đệm tải về. Xóa nó có thể khiến lần phân giải sau chọn phiên bản khác mà Package.swift cho phép, biến việc dọn dẹp thành nâng cấp phần phụ thuộc ngoài ý muốn. Package.swift, Sources, Tests, plugin và phần phụ thuộc cục bộ là mã nguồn: đừng xóa hay sửa chúng như bộ nhớ đệm — nội dung .build tạo lại được, còn tệp bạn viết thì có thể không.

Xử lý riêng gói trong Xcode

Với lỗi chỉ xảy ra trong Xcode, hãy thử File > Packages > Reset Package Caches rồi Resolve Package Versions, hoặc chỉ xóa DerivedData của đúng dự án đó. Trước khi purge bộ nhớ đệm toàn cục, hãy ghi lại lỗi gốc và đo các thư mục .build: lỗi xác thực, máy chủ Git không truy cập được hay manifest không hợp lệ sẽ không hết chỉ vì xóa phần tải về. AskClean giúp bạn tìm ra danh mục nào quanh SwiftPM đang chiếm dung lượng; còn phạm vi dọn bộ nhớ đệm của SwiftPM thì hãy để lệnh Swift chính thức quyết định.

Tóm tắt quyết định và rủi ro

Xóa bộ nhớ đệm Swift Package Manager (SPM) an toàn: khi nào dùng swift package clean, reset hay purge-cache và cách giữ nguyên Package.resolved.

Quyết địnhNơi kiểm traGiới hạn an toàn
SwiftPM có nhiều lớp bộ nhớ đệm.build / DerivedData / bộ nhớ đệm kho mãMột gói chạy bằng dòng lệnh thường có thư mục .build chứa checkout, repository, đầu ra build và trạng thái workspace; SwiftPM còn giữ một bộ nhớ đệm repository dùng chung để nhiều dự án không phải tải lại cùng một phần phụ thuộc.
Chọn lệnh theo phạm viswift package clean / reset / purge-cacheswift package clean xóa sản phẩm build của gói hiện tại — lựa chọn đầu tiên khi đầu ra biên dịch bị cũ hoặc khi chỉ muốn dọn một kho mã.
Giữ Package.resolved, trừ khi muốn đổi phiên bảnPackage.swift / Package.resolvedPackage.resolved ghi lại phiên bản phần phụ thuộc đã phân giải, không phải bộ nhớ đệm tải về.
Xử lý riêng gói trong XcodeFile > Packages / DerivedDataVới lỗi chỉ xảy ra trong Xcode, hãy thử File > Packages > Reset Package Caches rồi Resolve Package Versions, hoặc chỉ xóa DerivedData của đúng dự án đó.

Câu hỏi thường gặp

swift package clean xóa những gì?

Sản phẩm build của gói hiện tại. Lệnh không xóa Package.swift và không chủ ý thay đổi yêu cầu phần phụ thuộc; lần build sau sẽ tạo lại đầu ra.

reset và purge-cache có giống nhau không?

Không. reset nhắm vào bộ nhớ đệm và thư mục build của gói hiện tại; purge-cache xóa bộ nhớ đệm repository toàn cục của SwiftPM nên ảnh hưởng đến lần tải phần phụ thuộc sau của mọi dự án.

Có nên xóa Package.resolved không?

Không, nếu chỉ là dọn dẹp thông thường. Tệp này ghi lại phiên bản đã phân giải; xóa đi có thể khiến lần sau chọn phiên bản khác. Chỉ xóa khi bạn chủ đích muốn phân giải lại từ đầu.

Nguồn tham khảo

Xem thêm hướng dẫn dọn dung lượng cho lập trình viên