AskClean

ลบ Xcode Archives ได้ไหม? วิธีลบบิลด์เก่าโดยไม่ทำ dSYM หาย

ทีม AskClean · อัปเดตเมื่อ 2026-11-02

ลบ Xcode Archives เก่าได้ แต่ต้องยืนยันก่อนว่าบิลด์นั้นเลิกใช้แล้ว และไม่ต้องใช้ dSYM ของบิลด์นั้นแปลงรายงานแครชให้แสดงชื่อฟังก์ชันและบรรทัดโค้ดอีก ตรวจไฟล์ .xcarchive ทีละรายการใน Organizer ของ Xcode เก็บทุกบิลด์ที่ยังเผยแพร่บน App Store หรือ TestFlight รวมถึงบิลด์ Enterprise และ Ad Hoc ที่ยังติดตั้งใช้งาน แล้วย้ายไปถังขยะเฉพาะ archive ที่มีบิลด์ใหม่มาแทนแล้ว

ภาพไอโซเมตริกของแพ็กเกจ Xcode archive ที่แยกเป็นรุ่นปัจจุบันซึ่งได้รับการปกป้อง กับบิลด์เก่าที่เลิกใช้และลบได้
ถือว่า archive เป็นหลักฐานของแต่ละรุ่นที่เผยแพร่ ไม่ใช่แคชทั่วไป ปกป้องบิลด์ปัจจุบัน และตรวจบิลด์ที่เลิกใช้ทีละรายการ

Archive ไม่ใช่แคชแบบ DerivedData

คำสั่ง Product > Archive สร้างแพ็กเกจ .xcarchive ไว้ใน ~/Library/Developer/Xcode/Archives แยกตามโฟลเดอร์วันที่ ภายในมี binary ของบิลด์ที่แจกจ่ายจริง ข้อมูล metadata และมักมี dSYM ของบิลด์นั้น DerivedData สร้างใหม่จากซอร์สได้ แต่ dSYM ผูกกับ binary ด้วย UUID การบิลด์ commit เดิมซ้ำจะได้ binary ที่มี UUID ใหม่ จึงไม่ได้ dSYM ที่ใช้แทนของเดิมได้ หากลบ archive ไปแล้วมีรายงานแครชของบิลด์นั้นเข้ามา สแต็กอาจเหลือเพียงที่อยู่หน่วยความจำแทนชื่อฟังก์ชันและบรรทัดโค้ด

ตรวจสอบบิลด์ก่อนลบ

เปิด Window > Organizer > Archives แล้วเลือกแอป เพื่อดูเวอร์ชัน หมายเลขบิลด์ วันที่สร้าง และสถานะการแจกจ่ายของแต่ละรายการ ทำรายการที่ต้องเก็บก่อนรายการที่จะลบ ได้แก่ ทุกเวอร์ชันที่ผู้ใช้ยังดาวน์โหลดได้ ทุกบิลด์ TestFlight ที่ยังเปิดทดสอบ บิลด์ Enterprise หรือ Ad Hoc ที่ยังติดตั้งอยู่ และทุกรุ่นที่อาจยังต้องตรวจรายงานแครช การอัปโหลดสำเร็จไม่ได้แปลว่าลบ archive ในเครื่องได้ เพราะ archive คือหลักฐานที่ชัดเจนที่สุดที่เชื่อม binary, dSYM, เวอร์ชัน และหมายเลขบิลด์เข้าด้วยกัน

  1. เปิด Window > Organizer แล้วเลือก Archives
  2. เลือกแอป แล้วจดเวอร์ชันและหมายเลขบิลด์ของทุกบิลด์ที่ยังใช้งาน ทั้งบน App Store, TestFlight, Enterprise และ Ad Hoc
  3. ตรวจว่าอัปโหลด dSYM ที่จำเป็นแล้วในกรณีที่ทำได้ และคัดลอก archive ที่หาแทนไม่ได้ไปไว้ในที่เก็บที่มีการสำรองข้อมูล หากนโยบายของทีมกำหนด
  4. เลือกเป็นรายการที่จะลบเฉพาะ release candidate ที่มีบิลด์ใหม่แทนแล้ว บิลด์ภายในที่เลิกใช้ และเวอร์ชันที่พ้นช่วงตรวจสอบแครชแล้ว
  5. ลบทีละรายการใน Organizer ตรวจว่ารายการที่ต้องเก็บยังอยู่ครบ แล้วจึงล้างถังขยะ

วันที่อย่างเดียวไม่ใช่เกณฑ์ที่ปลอดภัย บิลด์ production รุ่นเก่าอาจยังติดตั้งอยู่ในเครื่องของลูกค้านานหลังจากออกเวอร์ชันใหม่แล้ว

ลบแบบที่ยังกู้คืนได้

ลบผ่าน Organizer เป็นหลักและลบทีละรายการ เพราะเห็นชื่อแอป เวอร์ชัน และหมายเลขบิลด์อยู่คู่กับคำสั่งลบ ใช้ Finder เฉพาะเมื่อ Organizer เปิดแพ็กเกจที่เก่าหรือเสียหายไม่ได้ โดยเทียบข้อมูลใน Info.plist ของ .xcarchive กับรายการที่ตรวจไว้ แล้วย้ายเฉพาะแพ็กเกจนั้นไปถังขยะ อย่าลบทั้งโฟลเดอร์วันที่เพียงเพราะชื่อดูเก่า และอย่าแก้หรือลบไฟล์ภายใน .xcarchive เก็บถังขยะไว้จนกว่าจะเปิด Organizer ตรวจซ้ำและ export บิลด์ที่ยังต้องใช้ได้ การลบถาวรด้วย rm -rf ในเทอร์มินัลจะตัดช่วงเวลากู้คืนนี้ทิ้ง โดยไม่ได้ทำให้การล้างถูกต้องขึ้น

กำหนดนโยบายการเก็บรักษา

ตัดสินจากสถานะการเผยแพร่ ไม่ใช่อายุไฟล์ บันทึกว่าแต่ละรุ่นเก็บ archive ไว้ที่ไหน อัปโหลด dSYM แล้วหรือยัง ใครกู้คืนได้ และเมื่อใดจึงลบได้ หากย้าย archive ไปดิสก์ภายนอกหรือคลาวด์ ให้ทดสอบกู้คืนจริง ถ้าดิสก์ใกล้เต็ม ให้เริ่มจาก DerivedData และข้อมูล Simulator ที่ไม่ใช้ก่อน AskClean แสดง .xcarchive แยกทีละรายการพร้อมคำเตือนว่าการลบย้อนกลับไม่ได้ ไม่รวมไว้กับแคชที่สร้างใหม่ได้ และลบอย่างถาวรเฉพาะรายการที่คุณยืนยัน แต่ AskClean ไม่รู้ว่าคุณต้องดูแลแต่ละรุ่นนานเท่าไร และหา dSYM ที่หายไปมาแทนให้ไม่ได้

สรุปการตัดสินใจและขอบเขตความปลอดภัย

ดูว่า Xcode Archives รายการไหนลบได้ ไฟล์ .xcarchive เก็บอยู่ที่ไหน วิธีลบบิลด์ที่เลิกใช้ผ่าน Organizer และเมื่อใดต้องเก็บ dSYM ไว้วิเคราะห์แครช

การตัดสินใจตรวจสอบได้ที่ขอบเขตความปลอดภัย
Archive ไม่ใช่แคชแบบ DerivedData~/Library/Developer/Xcode/Archivesคำสั่ง Product > Archive สร้างแพ็กเกจ .xcarchive ไว้ใน ~/Library/Developer/Xcode/Archives แยกตามโฟลเดอร์วันที่ ภายในมี binary ของบิลด์ที่แจกจ่ายจริง ข้อมูล metadata และมักมี dSYM ของบิลด์นั้น DerivedData สร้างใหม่จากซอร์สได้ แต่ dSYM ผูกกับ binary ด้วย UUID การบิลด์ commit เดิมซ้ำจะได้ binary ที่มี UUID ใหม่ จึงไม่ได้ dSYM ที่ใช้แทนของเดิมได้ หากลบ archive ไปแล้วมีรายงานแครชของบิลด์นั้นเข้ามา สแต็กอาจเหลือเพียงที่อยู่หน่วยความจำแทนชื่อฟังก์ชันและบรรทัดโค้ด
ตรวจสอบบิลด์ก่อนลบWindow > Organizer > Archivesเปิด Window > Organizer > Archives แล้วเลือกแอป เพื่อดูเวอร์ชัน หมายเลขบิลด์ วันที่สร้าง และสถานะการแจกจ่ายของแต่ละรายการ ทำรายการที่ต้องเก็บก่อนรายการที่จะลบ ได้แก่ ทุกเวอร์ชันที่ผู้ใช้ยังดาวน์โหลดได้ ทุกบิลด์ TestFlight ที่ยังเปิดทดสอบ บิลด์ Enterprise หรือ Ad Hoc ที่ยังติดตั้งอยู่ และทุกรุ่นที่อาจยังต้องตรวจรายงานแครช การอัปโหลดสำเร็จไม่ได้แปลว่าลบ archive ในเครื่องได้ เพราะ archive คือหลักฐานที่ชัดเจนที่สุดที่เชื่อม binary, dSYM, เวอร์ชัน และหมายเลขบิลด์เข้าด้วยกัน
ลบแบบที่ยังกู้คืนได้Organizer / Finder / ถังขยะลบผ่าน Organizer เป็นหลักและลบทีละรายการ เพราะเห็นชื่อแอป เวอร์ชัน และหมายเลขบิลด์อยู่คู่กับคำสั่งลบ ใช้ Finder เฉพาะเมื่อ Organizer เปิดแพ็กเกจที่เก่าหรือเสียหายไม่ได้ โดยเทียบข้อมูลใน Info.plist ของ .xcarchive กับรายการที่ตรวจไว้ แล้วย้ายเฉพาะแพ็กเกจนั้นไปถังขยะ อย่าลบทั้งโฟลเดอร์วันที่เพียงเพราะชื่อดูเก่า และอย่าแก้หรือลบไฟล์ภายใน .xcarchive เก็บถังขยะไว้จนกว่าจะเปิด Organizer ตรวจซ้ำและ export บิลด์ที่ยังต้องใช้ได้ การลบถาวรด้วย rm -rf ในเทอร์มินัลจะตัดช่วงเวลากู้คืนนี้ทิ้ง โดยไม่ได้ทำให้การล้างถูกต้องขึ้น
กำหนดนโยบายการเก็บรักษารายการบิลด์ที่เผยแพร่ / สำเนาสำรองตัดสินจากสถานะการเผยแพร่ ไม่ใช่อายุไฟล์ บันทึกว่าแต่ละรุ่นเก็บ archive ไว้ที่ไหน อัปโหลด dSYM แล้วหรือยัง ใครกู้คืนได้ และเมื่อใดจึงลบได้ หากย้าย archive ไปดิสก์ภายนอกหรือคลาวด์ ให้ทดสอบกู้คืนจริง ถ้าดิสก์ใกล้เต็ม ให้เริ่มจาก DerivedData และข้อมูล Simulator ที่ไม่ใช้ก่อน AskClean แสดง .xcarchive แยกทีละรายการพร้อมคำเตือนว่าการลบย้อนกลับไม่ได้ ไม่รวมไว้กับแคชที่สร้างใหม่ได้ และลบอย่างถาวรเฉพาะรายการที่คุณยืนยัน แต่ AskClean ไม่รู้ว่าคุณต้องดูแลแต่ละรุ่นนานเท่าไร และหา dSYM ที่หายไปมาแทนให้ไม่ได้

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

ลบทุกอย่างใน ~/Library/Developer/Xcode/Archives ได้ไหม?

ไม่ควรลบทั้งหมดโดยไม่ตรวจ เพราะ archive อาจเก็บ binary และ dSYM ชุดเดียวที่มีของบิลด์ที่แจกจ่ายไปแล้ว ให้เก็บทุกบิลด์ที่ยังใช้บน App Store, TestFlight, Enterprise หรือ Ad Hoc และทุกเวอร์ชันที่อาจยังต้องตรวจแครช

ลบ archive แล้วแอปจะหายจาก App Store ไหม?

ไม่ การลบ .xcarchive ในเครื่องไม่ได้นำแอปที่อัปโหลดแล้วออกจาก App Store Connect หรือจากอุปกรณ์ของลูกค้า แต่คุณจะเสียไฟล์ของรุ่นนั้นในเครื่อง ซึ่งอาจยังต้องใช้ export ใหม่หรือแปลงรายงานแครช (symbolication)

บิลด์ commit เดิมใหม่เพื่อสร้าง dSYM มาแทนได้ไหม?

ไม่ได้อย่างน่าเชื่อถือ dSYM ต้องตรงกับ UUID ของ binary ที่แจกจ่ายไปแล้ว ส่วนการบิลด์ใหม่จะได้ binary ที่มี UUID ต่างออกไป ให้เก็บ archive ต้นฉบับหรือ dSYM ที่ตรงกันไว้

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

คู่มือจัดการพื้นที่สำหรับนักพัฒนาที่เกี่ยวข้อง