ลบ Xcode DerivedData และแคชของนักพัฒนาอย่างปลอดภัย
ทีม AskClean · อัปเดตเมื่อ 2026-11-02
DerivedData คือโฟลเดอร์งานชั่วคราวของ Xcode ที่เก็บผลลัพธ์การบิลด์และดัชนี และอาจค่อย ๆ โตจนถึงหลายสิบกิกะไบต์โดยไม่รู้ตัว ลบได้อย่างปลอดภัย เพียงออกจาก Xcode แล้วลบเนื้อหาใน ~/Library/Developer/Xcode/DerivedData จากนั้น Xcode จะสร้างทุกอย่างใหม่ในการบิลด์ครั้งถัดไป คู่มือนี้อธิบายขั้นตอนดังกล่าว รวมถึงการจัดการ Simulator, Archives และแคชของตัวจัดการแพ็กเกจ

DerivedData คืออะไร และทำไมจึงใหญ่ขึ้นเรื่อย ๆ
DerivedData คือที่ที่ Xcode เก็บทุกอย่างที่สร้างขึ้นจากซอร์สโค้ดของคุณ ได้แก่ ไฟล์อ็อบเจ็กต์ระหว่างการบิลด์ ผลลัพธ์ที่คอมไพล์แล้ว แคชโมดูล ดัชนีสัญลักษณ์ที่ใช้กับ code completion และ jump to definition รวมถึงบันทึกการบิลด์ ตำแหน่งเริ่มต้นคือ ~/Library/Developer/Xcode/DerivedData โดยมีโฟลเดอร์ย่อยหนึ่งโฟลเดอร์ต่อโปรเจกต์หรือ workspace ที่คุณเคยเปิด
โฟลเดอร์นี้โตขึ้นด้วยเหตุผลเชิงโครงสร้าง Xcode สร้างโฟลเดอร์ DerivedData ให้ทุกโปรเจกต์ที่คุณเปิด รวมถึงโปรเจกต์ที่โคลนมาบิลด์ครั้งเดียวแล้วไม่ได้แตะอีก และไม่ได้ลบโฟลเดอร์เหล่านั้นให้เอง แต่ละโฟลเดอร์ยังเก็บผลลัพธ์การบิลด์แยกตาม configuration และปลายทาง (Debug กับ Release, Simulator กับอุปกรณ์จริง) จึงควรวัดขนาดโฟลเดอร์ย่อยของแต่ละโปรเจกต์ แทนการเดาว่าเครื่องของคุณจะได้พื้นที่คืนเท่าใด
ทุกอย่างในโฟลเดอร์นี้สร้างใหม่ได้ตามนิยาม ซึ่งก็คือความหมายของคำว่า “derived” การลบ DerivedData ไม่แตะซอร์สโค้ด การตั้งค่าโปรเจกต์ หรือสิ่งใดที่อยู่ใน version control ต้นทุนมีเพียงเวลา การบิลด์ครั้งถัดไปของแต่ละโปรเจกต์จะเป็น clean build เต็มรูปแบบ และ Xcode จะทำดัชนีใหม่อยู่เบื้องหลังอีกไม่กี่นาที
ลบ DerivedData
คำสั่ง Clean Build Folder ของ Xcode (Product > Clean Build Folder หรือ Shift-Command-K) ล้างเฉพาะผลลัพธ์การบิลด์ของโปรเจกต์ที่เปิดอยู่ มีประโยชน์เมื่อบิลด์มีอาการแปลก ๆ แต่แทบไม่ช่วยเรื่องพื้นที่ดิสก์ ถ้าต้องการพื้นที่คืนจริง ให้ลบโฟลเดอร์ DerivedData โดยตรง ซึ่งทำได้สามวิธี คือเปิดโฟลเดอร์จากการตั้งค่า Locations ของ Xcode ไปที่โฟลเดอร์นั้นเองใน Finder หรือลบผ่านเทอร์มินัล ทั้งสามวิธีให้ผลลัพธ์เดียวกัน
การลบทีละโปรเจกต์เป็นทางเลือกแบบเจาะจง เก็บ DerivedData ของสองสามโปรเจกต์ที่คุณบิลด์ทุกวันไว้ แล้วลบโฟลเดอร์ของโปรเจกต์อื่นทั้งหมด ส่วนการลบทั้งโฟลเดอร์เป็นทางเลือกที่เร็วกว่าและทำได้เช่นกัน เพียงแต่ทุกโปรเจกต์จะต้องบิลด์ใหม่ทั้งหมดพร้อมกัน
- ออกจาก Xcode ก่อน การลบ DerivedData ขณะที่ Xcode ทำงานอยู่อาจทำให้ตัวทำดัชนีทำงานผิดพลาด และไฟล์ที่ Xcode เปิดค้างไว้อาจลบได้ไม่หมด
- หาโฟลเดอร์ DerivedData ได้สองทาง คือใน Xcode ให้เปิด Settings > Locations แล้วคลิกลูกศรเล็ก ๆ ข้างพาธ DerivedData เพื่อแสดงโฟลเดอร์ใน Finder หรือใน Finder กด Command-Shift-G แล้วป้อน ~/Library/Developer/Xcode/DerivedData โดยตรง
- เรียงโฟลเดอร์ย่อยของโปรเจกต์ตามขนาด เลือกโฟลเดอร์ที่ต้องการลบ (หรือกด Command-A เพื่อเลือกทั้งหมด) แล้วย้ายไปถังขยะ การย้ายไปถังขยะก่อนเป็นนิสัยที่ปลอดภัยกว่า เพราะถ้าเปลี่ยนใจก็กู้คืนได้ทันที
- หรือใช้เทอร์มินัล คำสั่ง rm -rf ~/Library/Developer/Xcode/DerivedData ลบทุกอย่างในครั้งเดียว และเร็วกว่า Finder เมื่อโฟลเดอร์ใหญ่มาก แต่ให้อ่านหมายเหตุด้านล่างก่อนใช้
- เปิด Xcode อีกครั้งแล้วบิลด์ การบิลด์ครั้งแรกของแต่ละโปรเจกต์จะนานกว่าปกติอย่างเห็นได้ชัด และจะเห็น “Indexing” ในแถบกิจกรรมอยู่พักหนึ่ง ทั้งสองอย่างเป็นต้นทุนครั้งเดียว
ระวังเมื่อใช้ rm -rf เพราะคำสั่งนี้ข้ามถังขยะและลบอย่างถาวรโดยย้อนกลับไม่ได้ พิมพ์พาธให้ถูกต้องทุกตัวอักษร ห้ามใช้ sudo กับงานนี้ และถ้าไม่ถนัดเทอร์มินัล วิธีผ่าน Finder ให้ผลเหมือนกันและยังกู้คืนได้
ล้างรันไทม์ Simulator เก่า
Simulator มักเป็นอีกหมวดใหญ่ที่ใช้พื้นที่จัดเก็บข้อมูลของนักพัฒนา รันไทม์ iOS, watchOS หรือ tvOS ทุกตัวที่ดาวน์โหลดไว้ใช้พื้นที่ของตัวเอง และอุปกรณ์จำลองแต่ละเครื่องเก็บข้อมูลไว้ใน ~/Library/Developer/CoreSimulator/Devices ถ้าคุณอัปเกรด Xcode มาหลายรอบแล้ว ให้ตรวจรันไทม์ของระบบเวอร์ชันที่ไม่ได้อยู่ในชุดทดสอบแล้ว
วิธีที่ได้ผลเร็วที่สุดคือคำสั่งล้างในตัว รัน xcrun simctl delete unavailable ในเทอร์มินัล คำสั่งนี้ลบอุปกรณ์จำลองทุกเครื่องที่มีสถานะ unavailable ซึ่งส่วนใหญ่ตกค้างจากรันไทม์ที่ถูกลบไปแล้วและ Xcode รุ่นเก่า พร้อมแอปและข้อมูลภายในอุปกรณ์เหล่านั้น ให้ตรวจรายการด้วย xcrun simctl list devices ก่อน โดยเฉพาะเมื่อติดตั้ง Xcode ไว้มากกว่าหนึ่งรุ่น
สำหรับตัวรันไทม์ ให้เปิด Settings > Components ของ Xcode (Xcode 14–15 เรียกว่า Platforms) จะเห็นรันไทม์ Simulator ที่ติดตั้งไว้แต่ละตัวพร้อมขนาด เลือกตัวที่เก่าแล้วลบออก เก็บไว้เฉพาะรันไทม์ล่าสุดของแต่ละแพลตฟอร์ม เว้นแต่คุณยังทดสอบบนระบบเวอร์ชันเก่าอยู่
คุณยังลบอุปกรณ์จำลองทีละเครื่องได้ใน Window > Devices and Simulators โดยไปที่แท็บ Simulators คลิกขวาอุปกรณ์ที่ไม่เคยใช้ เช่น iPhone รุ่นซ้ำกันหกเครื่องที่มีข้อมูลจากการทดสอบรอบเก่า แล้วเลือก Delete ข้อมูลและแอปที่บันทึกไว้ในอุปกรณ์นั้นจะถูกลบไปด้วย
Archives, ไฟล์ DeviceSupport และแคช
Archives สะสมอยู่ใน ~/Library/Developer/Xcode/Archives ทุกครั้งที่คุณใช้ Product > Archive เพื่อแจกจ่ายบิลด์ แต่ละ archive มีแอปที่บิลด์สมบูรณ์พร้อม dSYM (สัญลักษณ์สำหรับดีบัก) มักมีขนาด 100 MB ถึง 1 GB ต่อรายการ ก่อนลบต้องรู้ข้อแลกเปลี่ยน dSYM ภายในคือสิ่งที่ใช้แปลงรายงานแครชของบิลด์นั้นให้แสดงชื่อฟังก์ชันและบรรทัดโค้ด เก็บ archive ของเวอร์ชันที่ยังเผยแพร่บน App Store หรือ TestFlight ไว้ (หรือยืนยันว่า App Store Connect มี dSYM แล้ว) แล้วจึงลบที่เหลือ วิธีที่ปลอดภัยที่สุดคือใช้ Organizer ของ Xcode (Window > Organizer > Archives) ซึ่งให้คุณตรวจรายละเอียดของแต่ละรายการก่อนลบ
iOS DeviceSupport ที่ ~/Library/Developer/Xcode/iOS DeviceSupport เก็บสัญลักษณ์สำหรับดีบักที่ Xcode คัดลอกมาจาก iPhone หรือ iPad เครื่องจริงทุกเครื่องที่คุณเคยเชื่อมต่อ หนึ่งโฟลเดอร์ต่อ iOS หนึ่งเวอร์ชัน ปกติโฟลเดอร์ละ 2-5 GB โฟลเดอร์ของ iOS เวอร์ชันที่ไม่มีอุปกรณ์ของคุณใช้แล้วเป็นเพียงภาระที่ไม่จำเป็น ลบได้ และหากวันหนึ่งต่ออุปกรณ์ที่ใช้เวอร์ชันนั้นอีก Xcode จะคัดลอกสัญลักษณ์มาใหม่เอง (จะเห็นข้อความ “Preparing debugger support” หนึ่งครั้ง) นอกจากนี้ยังมีโฟลเดอร์แบบเดียวกันสำหรับอุปกรณ์ watchOS และ tvOS
Xcode ยังมีแคชของตัวเองใน ~/Library/Caches/com.apple.dt.Xcode และ Simulator เก็บแคชไว้ใน ~/Library/Developer/CoreSimulator/Caches ทั้งสองแห่งถูกสร้างใหม่เมื่อจำเป็น แต่ให้ล้างเฉพาะตอนที่ออกจาก Xcode และแอป Simulator แล้ว และอย่าแตะไฟล์แคชของ CoreSimulator ที่คุณไม่รู้จัก
แคชของตัวจัดการแพ็กเกจ (SwiftPM, CocoaPods, npm, Homebrew)
ตัวจัดการแพ็กเกจเก็บ dependency ที่ดาวน์โหลดไว้เพื่อให้การติดตั้งครั้งต่อไปเร็วขึ้น ซึ่งมีประโยชน์ แต่ก็อาจกลายเป็นหมวดที่ใช้พื้นที่มากบนเครื่องที่ผ่านงานมาหลายปี แคชดาวน์โหลดเหล่านี้สร้างใหม่ได้ แต่การติดตั้งครั้งถัดไปจะต้องดาวน์โหลดแพ็กเกจอีกครั้ง
Swift Package Manager แคชแพ็กเกจที่ดาวน์โหลดไว้ที่ ~/Library/Caches/org.swift.swiftpm และ checkout ที่ resolve แล้วของแต่ละโปรเจกต์ก็อยู่ในโฟลเดอร์ DerivedData ของโปรเจกต์นั้นด้วย การล้าง DerivedData จึงล้างส่วนนั้นไปแล้ว ส่วนแคชที่ใช้ร่วมกันลบได้จาก Finder หรือใช้ rm -rf กับพาธนั้น
CocoaPods เก็บ pod ที่ดาวน์โหลดไว้ที่ ~/Library/Caches/CocoaPods วิธีล้างที่เหมาะสมคือคำสั่งในตัว pod cache clean --all ซึ่งไม่แตะโฟลเดอร์ Pods ในโปรเจกต์ของคุณ และลบเฉพาะแคชดาวน์โหลดเท่านั้น
แคชของ npm อยู่ที่ ~/.npm และอาจใหญ่หลายกิกะไบต์บนเครื่องที่ทำงาน JavaScript เป็นหลัก รัน npm cache clean --force เพื่อล้าง (npm บังคับให้ใส่แฟล็กนี้เพราะแคชซ่อมแซมตัวเองได้และปกติไม่จำเป็นต้องล้าง แต่การลบก็ปลอดภัย เพราะแพ็กเกจจะถูกดาวน์โหลดใหม่เมื่อติดตั้งครั้งถัดไป) ผู้ใช้ pnpm ใช้ pnpm store prune แทนได้
Homebrew สะสมไฟล์ดาวน์โหลดเก่าและแพ็กเกจเวอร์ชันที่ล้าสมัยไว้ brew cleanup ลบเวอร์ชันที่ล้าสมัยและไฟล์ดาวน์โหลดเก่า และเมื่อรันแบบทั้งระบบ (ไม่ระบุชื่อแพ็กเกจ) จะถอน dependency ที่ไม่มีอะไรใช้แล้วออกด้วย เว้นแต่ตั้ง HOMEBREW_NO_AUTOREMOVE ไว้ ส่วน brew cleanup --prune=all ล้างแคชดาวน์โหลดทั้งหมดเพิ่มเติม หากต้องการดูรายการแบบทดลอง (dry run) ว่าจะลบอะไรบ้าง ให้รัน brew cleanup -n ก่อน
ทำให้เป็นอัตโนมัติ
ทุกวิธีข้างต้นได้ผล แต่ไฟล์ขยะของนักพัฒนาเกิดขึ้นซ้ำไม่จบ DerivedData กลับมาภายในหนึ่งสัปดาห์ของการทำงานปกติ แคชเต็มขึ้นอีก และการอัปเดต Xcode แต่ละครั้งก็ทิ้งรันไทม์เก่าไว้อีกตัว ถ้าไม่อยากทำหกขั้นตอนนี้ด้วยมือซ้ำทุกเดือน ส่วนนี้คุ้มที่จะทำให้เป็นอัตโนมัติ ด้วยเครื่องมือที่อธิบายเหตุผลให้เห็น แทนที่จะลบแบบเหมารวมอย่างเงียบ ๆ
AskClean จัดไฟล์ของนักพัฒนาเป็นหมวดเฉพาะ สแกนครั้งเดียวก็แสดง Xcode DerivedData แยกตามโปรเจกต์ รันไทม์ Simulator เก่า (อ่านผ่าน simctl และเก็บรุ่นล่าสุดของแต่ละแพลตฟอร์มไว้) ไฟล์ DeviceSupport และแคชของตัวจัดการแพ็กเกจอย่าง npm, SwiftPM, cargo, uv และอื่น ๆ รวมถึงตัวกินพื้นที่รุ่นใหม่อย่างโมเดล AI ในเครื่อง โดยแสดงโมเดล Hugging Face แยกทีละโมเดล และแสดงคลังโมเดลของ Ollama เป็นรายการเดียว ทั้งหมดไม่ถูกเลือกไว้โดยค่าเริ่มต้น
ทุกรายการมีคำอธิบายว่าคืออะไร สร้างใหม่ได้หรือไม่ และการลบมีต้นทุนอะไร โดยไม่มีอะไรเริ่มทำงานจนกว่าคุณจะยืนยัน รายการที่ยืนยันจะถูกลบอย่างถาวร ไม่ได้ย้ายไปถังขยะ จึงควรตรวจทุกรายการที่เลือกก่อนยืนยัน ซอร์สโค้ดและคลังรูปภาพของคุณจะไม่ถูกแตะต้อง เป็นเช็กลิสต์เดียวกับคู่มือนี้ แต่ไม่ต้องเสียเวลาเป็นชั่วโมงในเทอร์มินัล
อะไรสร้างใหม่ได้ และอะไรสร้างใหม่ไม่ได้
ตารางนี้แสดงขอบเขตของการลบ ไม่ได้สัญญาว่าทุกเครื่องจะได้พื้นที่คืนเท่ากัน ให้วัด Mac ของคุณก่อนและหลังทุกการเปลี่ยนแปลง สคริปต์ตรวจสอบแบบอ่านอย่างเดียวในคู่มือพื้นที่จัดเก็บข้อมูลของ Xcode Simulator รายงานขนาดโฟลเดอร์เหล่านี้ได้โดยไม่เปลี่ยนแปลงอะไร
| หมวด | ตำแหน่งเริ่มต้น | ผลของการลบ |
|---|---|---|
| DerivedData | ~/Library/Developer/Xcode/DerivedData | บิลด์และทำดัชนีใหม่ ซอร์สโค้ดและประวัติ git ไม่ได้รับผลกระทบ |
| อุปกรณ์จำลองของ Simulator | ~/Library/Developer/CoreSimulator/Devices | แอปและข้อมูลทดสอบในอุปกรณ์จำลองที่เลือกจะหายไป ให้ลบผ่าน simctl หรือ Xcode |
| Archives | ~/Library/Developer/Xcode/Archives | อาจทำให้ dSYM ที่ต้องใช้แปลงรายงานแครชหายไป ให้ตรวจใน Organizer ก่อน |
| DeviceSupport | ~/Library/Developer/Xcode/iOS DeviceSupport | สัญลักษณ์สำหรับดีบักจะถูกคัดลอกมาใหม่เมื่อเชื่อมต่ออุปกรณ์ที่ใช้ระบบเวอร์ชันนั้นอีกครั้ง |
คำถามที่พบบ่อย
ลบ DerivedData ปลอดภัยไหม?
ปลอดภัย และเป็นหนึ่งในการลบไฟล์ขนาดใหญ่ที่ปลอดภัยที่สุดบน Mac DerivedData มีเฉพาะไฟล์ที่ Xcode สร้างจากซอร์สของคุณ ได้แก่ ผลลัพธ์การบิลด์ แคชโมดูล ดัชนี และบันทึก ส่วนโค้ด ไฟล์โปรเจกต์ และประวัติ git อยู่ที่อื่นและไม่ได้รับผลกระทบ ผลที่ตามมามีเพียงว่าการบิลด์ครั้งถัดไปของแต่ละโปรเจกต์จะเป็นการบิลด์ใหม่ทั้งหมด และ Xcode จะทำดัชนีใหม่อีกรอบ
ควรล้าง DerivedData บ่อยแค่ไหน?
ไม่มีกำหนดตายตัว ล้างเมื่อขนาดใหญ่จนมีผลต่อพื้นที่ ซึ่งสำหรับนักพัฒนาที่ทำงานสม่ำเสมอส่วนใหญ่คือทุกหนึ่งถึงสองเดือน มีสองจังหวะที่ควรล้างเสมอ คือเมื่อต้องการพื้นที่ดิสก์ด่วน และเมื่อโปรเจกต์มีข้อผิดพลาดในการบิลด์ที่อธิบายไม่ได้หรือ code completion แสดงข้อมูลเก่า ซึ่งการล้าง DerivedData เป็นวิธีแก้มาตรฐานลำดับแรก
หลังลบ DerivedData แล้ว Xcode จะช้าลงไหม?
ช้าลงชั่วคราว การบิลด์ครั้งแรกของแต่ละโปรเจกต์เป็น clean build ซึ่งอาจใช้เวลานานกว่าการบิลด์แบบ incremental หลายเท่า และการทำดัชนีเบื้องหลังต้องใช้เวลาอีกไม่กี่นาทีกว่า code completion และการค้นหาจะกลับมาใช้ได้เต็มที่ หลังรอบแรกนั้น ประสิทธิภาพจะกลับมาเหมือนเดิม เพราะ DerivedData เก็บแคช ไม่ใช่การปรับแต่งที่คุณจะเสียไปถาวร
แล้ว ~/Library/Developer/CoreSimulator ลบได้ไหม?
อย่าลบโดยไม่ตรวจ โฟลเดอร์นี้เก็บ Simulator ที่ติดตั้งอยู่และข้อมูลของอุปกรณ์จำลอง การลบทั้งโฟลเดอร์จะทำให้ใช้งานไม่ได้จนกว่าจะติดตั้งรันไทม์ใหม่ ให้ลบอย่างถูกวิธีแทน รัน xcrun simctl delete unavailable เพื่อลบอุปกรณ์ที่ตกค้าง (แอปและข้อมูลในอุปกรณ์เหล่านั้นจะถูกลบไปด้วย) ลบรันไทม์เก่าใน Settings > Components ของ Xcode ลบอุปกรณ์ที่ไม่ใช้ใน Devices and Simulators และล้างด้วยมือเฉพาะโฟลเดอร์ย่อย Caches หลังออกจาก Xcode และ Simulator แล้ว
Clean Build Folder ให้ผลเหมือนกันไหม?
ไม่เหมือนกัน Product > Clean Build Folder (Shift-Command-K) ล้างเฉพาะผลลัพธ์การบิลด์ของโปรเจกต์ปัจจุบัน และไม่แตะดัชนี แคชโมดูล และโฟลเดอร์ของโปรเจกต์อื่น ๆ คำสั่งนี้มีไว้แก้ปัญหาการบิลด์ ไม่ใช่เพิ่มพื้นที่ดิสก์ หากต้องการพื้นที่คืนจริง ต้องลบโฟลเดอร์ DerivedData โดยตรง
แหล่งอ้างอิง