AskCleanAskClean

วิธีล้างแคช Swift Package Manager อย่างปลอดภัย

ทีม AskClean · อัปเดตเมื่อ 2026-07-31

ใช้ swift package clean สำหรับไฟล์ผลลัพธ์การบิลด์ของแพ็กเกจปัจจุบัน ใช้ reset เพื่อรีเซ็ตสถานะในเครื่องทั้งหมด และใช้ swift package purge-cache เฉพาะกับแคช repository ส่วนกลาง เก็บ Package.swift และ Package.resolved ไว้ เพราะเป็นตัวกำหนด dependencies ไม่ใช่แคชที่ทิ้งได้

กราฟ dependencies ของ Swift ที่แยกจากชั้นแคชซ้ำ
ล้างไฟล์ผลลัพธ์ของแพ็กเกจในเครื่องก่อน และ purge การดาวน์โหลดร่วมเฉพาะเมื่อเป็นสาเหตุ

SwiftPM มีหลายชั้น

แพ็กเกจ command line เก็บ checkouts และผลิตภัณฑ์ใน .build ขณะที่ SwiftPM มีแคช repository ร่วม Xcode อาจเก็บผลิตภัณฑ์ของแพ็กเกจใน DerivedData ของโปรเจกต์ ให้ล้างชั้นที่แคบที่สุดซึ่งอธิบายปัญหาได้

เลือกคำสั่งตามขอบเขต

swift package clean ลบไฟล์ผลลัพธ์การบิลด์ของแพ็กเกจปัจจุบัน reset กว้างกว่าและเตรียมสถานะในเครื่องใหม่ ส่วน purge-cache กระทบการดาวน์โหลดที่หลายโปรเจกต์ใช้ร่วมกัน การ resolve ครั้งถัดไปจึงอาจต้องใช้เครือข่ายและเวลามากขึ้น

  1. บันทึกการเปลี่ยนแปลงและตรวจว่า Package.swift กับ Package.resolved อยู่ครบ
  2. รัน swift package clean จาก root แล้ว build ใหม่
  3. ใช้ swift package reset เฉพาะเมื่อสถานะในเครื่องยังเสีย
  4. ใช้ swift package purge-cache เฉพาะเมื่อยืนยันว่าแคชร่วมเป็นสาเหตุ
  5. ตรวจ dependencies และ tests หลังล้าง

รัน swift package --help เพราะคำสั่งย่อยที่ใช้ได้ขึ้นกับเวอร์ชัน Swift ที่ติดตั้ง

เก็บไฟล์การ resolve

Package.resolved บันทึกเวอร์ชันที่เจาะจง การลบอาจเลือกเวอร์ชันอื่นที่อนุญาตและเปลี่ยนการล้างให้เป็นการอัปเดต Package.swift, Sources, Tests, plugins และ local dependencies เป็นซอร์ส ไม่ควรลบเหมือนแคช

จัดการ Xcode แยกต่างหาก

หากปัญหาเกิดเฉพาะใน Xcode ให้ลอง File > Packages > Reset Package Caches และ Resolve Package Versions หรือลบ DerivedData ของโปรเจกต์นั้น วัดโฟลเดอร์ .build ก่อน purge ส่วนกลาง AskClean ช่วยระบุหมวด แต่คำสั่ง Swift เป็นตัวกำหนดขอบเขต

คำถามที่พบบ่อย

swift package clean ลบอะไร

ลบไฟล์ผลลัพธ์การบิลด์ของแพ็กเกจปัจจุบัน ซึ่ง build ครั้งถัดไปจะสร้างใหม่

reset กับ purge-cache เหมือนกันไหม

ไม่ reset มีผลกับแพ็กเกจปัจจุบัน ส่วน purge-cache มีผลกับแคช repository ส่วนกลาง

ควรลบ Package.resolved ไหม

ไม่ควรสำหรับการล้างทั่วไป ลบเฉพาะเมื่อจงใจต้องการ resolve เวอร์ชันใหม่

แหล่งอ้างอิง

คู่มือพื้นที่จัดเก็บสำหรับนักพัฒนาเพิ่มเติม