สำหรับชาว XCode ที่ Disk space ใกล้เต็ม

Sunchai Pitakchonlasup
te<h @TDG
Published in
4 min readJan 3, 2018

ความเจ็บปวดอย่างหนึ่งของเหล่าคนทำงานกับ XCode โดยเฉพาะอย่างยิ่ง iOS Developer คือการได้เห็น Notification ด้านล่างนี้เด้งขึ้นมา

หลายๆคนก็จะลองกด Manage… ตามคำแนะนำของ Notification แล้วพยายามลบข้อมูลที่ไม่จำเป็นใน Documents, iBook, Music, Photos, Mail ออกจากเครื่องไป

บางคนลบเกือบจะทุกอย่างที่จะลบได้แล้ว ก็ยังได้พื้นที่คืนมาไม่มากพออยู่ดี แต่ถ้าเราลองสังเกตหน้าต่างข้างบนดีๆจะพบว่า ข้อมูลส่วนที่กินพื้นที่มากที่สุดบนคือส่วนของ System 😱😱😱 ซึ่งมันคืออะไรก็ไม่รู้ จะไปลบอะไรที่ไหนดี เพื่อเรียกคืน Disk space กลับมา บทความนี้มีคำตอบมาให้

เริ่มที่อะไรง่ายๆก่อน — Derived Data and Archives

แน่นอนว่า iOS Developer ทุกคนรู้จักโฟร์เดอร์ที่ชื่อว่า Derived Data กันดีอยู่แล้ว เพราะอย่างน้อยต้องเคยเข้ามาล้างโฟร์เดอร์นี้ไม่มากก็น้อย

โฟร์เดอร์ Derived Data นั้นมีไว้บรรจุไฟล์ต่างๆที่ถูกสร้างขึ้นมาในขณะที่เราทำการ build แอพ เช่น build information, index and debug/release built targets เมื่อคุณทำงานของคุณไปเรื่อยๆโปรเจคแล้วโปรเจคเหล่า เปลี่ยน simulator ไปๆมาๆ โฟร์เดอร์นี้ก็จะมีขนาดใหญ่ขึ้นเรื่อยๆได้ คุณสามารถลบโฟร์เดอร์นี้ทิ้งได้เลยโดยไม่ต้องคิดอะไรมาก (ลบแค่ไฟล์และโฟร์เดอร์ที่อยู่ภายในโฟร์เดอร์ Derived Data นะ ไม่ให้ลบตัวโฟร์เดอร์ Derived Data) เพราะข้อมูลเหล่านี้เมื่อเราสั่ง build ใหม่มันจะถูกสร้างกลับมาได้อีก การ build ในครั้งถัดมาหลังจากที่เราพึ่งลบของในโฟร์เดอร์นี้ไปอาจจะช้าลงไปเล็กน้อยแต่ก็จะช้าแค่ครั้งเดียว

วิธีเข้าไปที่โฟร์เดอร์ Derived Data นี้มี 2 ทาง ทางแรก กดไปที่เมนู File > Workspace Settings ใน XCode ภายใต้กลุ่ม Pre-user Workspace Settings จากมีการแสดงพาร์ทของโฟร์เดอร์ Derived Data กดปุ่มลูกศรชี้ขวาหลังพาร์ทนั้น

หรือ อีกวิธีหนึ่งคือการเข้าผ่าน Finder โดยตรง เข้าไปที่เมนู Go > Go to Finder แล้วใส่พาร์ทด้านล่างนี้เข้าไป

~/Library/Developer/Xcode/DerivedData

นอกจากโฟร์เดอร์ Derived Data แล้ว ยังมีอีกโฟร์เดอร์หนึ่งที่ชาว XCode ทุกคนต้องคุ้นเคยนั่นก็คือ Archives นั่นเอง ไฟล์ต่างๆที่อยู่ภายใต้โฟร์เดอร์ Archives นี้เกิดขึ้นมาจากการทำ Product > Archive นั่นเอง ข้อมูลที่จำเป็นต่อการ Archive ทั้งหมดของเวอร์ชั่นต่างๆและบิลด์ต่างๆของคุณจะถูกเก็บไว้ในรูปแบบพิเศษภายใต้โฟร์เดอร์นี้

คำถามต่อมาก็คือ เราสามารถลบไฟล์ทั้งหมดที่อยู่ในโฟร์เดอร์นี้อย่างไม่ต้องลังเลได้ไหม คำตอบคือ “ไม่ใช่สักทีเดียว” ข้อดีของการเก็บ Archive ของเวอร์ชั่นต่างๆและบิลด์ต่างๆของคุณเอาไว้ คือคุณสามารถกลับมา debug เวอร์ชั่นนั้นๆหรือบิลด์นั้นๆของคุณได้ในอนาคต หรือแม้แต่ deploy เวอร์ชั่นนั้นๆ/บิลด์นั้นๆของคุณได้ในอนาคตได้อีกครั้งโดยไม่ต้องใช้ source control ย้อนกลับไปที่ช่วงเวลานั้นแล้วเริ่มบิลด์ใหม่ตั้งแต่ต้น

แต่ๆ แต่ถ้าคุณมั่นใจแล้วว่า Archive เก่าๆเหล่านั้นไม่มีความสำคัญใดๆต่อคุณอีกแล้วก็สามารถลบทิ้งได้เลยโดยไม่ต้องลังเล

การลบ Archives สามารถทำได้ 2 วิธีเช่นกัน คือ การเปิดไปที่เมนู Window > Organizer ภายใต้ส่วนของ Archives เลือกชื่อโปรเจคของคุณทางด้านซ้ายมือ แล้วเลือก Archive ที่ต้องการลบจากลิสต์ที่แสดงตรงกลาง

อีกวิธีนึงคือการใช้ Finder เข้าไปที่พาร์ทด้านล่างนี้โดยตรง

~/Library/Developer/Xcode/Archives

โดยส่วนตัวแล้วหลังจากเลือกลบไฟล์จาก 2 โฟร์เดอร์ข้างต้น ทำให้ผมได้เนื้อที่คืนมาเกือบๆ 5-8 GB เลยทีเดียว (แต่ไม่ได้ cature screen เก็บเอาไว้)

Devices และ Simulators

ขยับลงมาดูอะไรที่ลึกลงไปอีกระดับนึงกันบ้าง สำหรับ XCode developer ที่ทำงานบนแมคต่อเนื่องกันมาประมาณ 1–2 ปีโดยไม่ได้ Format และ Clean Install Mac OS เลย การลบไฟล์ใน 2 โฟร์เดอร์ข้างต้นอาจช่วยได้ไม่มากหรือช่วยได้แต่ก็ยังไม่เพียงพออยู่ดี เพราะเมื่อคุณสั่ง Run, Build หรือ Archive ครั้งถัดมา ทุกอย่างก็กลับมาหรอกหลอนอยู่ดี ในเซคชั่นนี้เราจะมาจัดการกับไฟล์ใหญ่ๆที่หมดความสำคัญแล้วอย่างแน่นอนแต่มันยังคงฝั่งลึกอยู่ใน System ของคุณ

เริ่มต้นกันที่ Devices แน่นอนว่าในระหว่างการพัฒนาโปรเจคใดๆเครื่องแมคของคุณจะต้องถูกนำ iPhone, iPad มากมายหลายเครื่องเข้ามาเสียบ ไม่ว่าจะเป็นเครื่องส่วนตัวของคุณเองหรือเครื่องเทสของบริษัท ในการเสียบ iOS devices เข้าเครื่องแมคแต่ละครั้งแมคของคุณจะทำการสร้างโฟร์เดอร์ย่อยใหม่มาภายใต้โฟร์เดอร์ iOS Device Support โดยโฟร์เดอร์ย่อยที่ถูกสร้างขึ้นมานั้นจะใช้ Device version เป็น identifier นั่นหมายความว่า iPhone เครื่องเดิมแต่อัพเดท iOS version ใหม่มาเสียบมันก็จะสร้างโฟร์เดอร์ย่อยใหม่ขึ้นมาอีกทีด้วยนั่นเอง ซึ่งในความจริงแล้วโฟร์เดอร์ย่อยเก่าๆที่เกิดมาตอน iOS version เก่ามันไม่มีประโยชน์ใดๆอีกต่อไปแล้ว แต่มันไม่ได้ถูกลบออกไปอย่างอัตโนมัติ

วิธีเข้าไปลบโฟร์เดอร์ย่อยของ iOS version เก่าทำได้โดยใช้ Finder เปิดไปที่

~/Library/Developer/Xcode/iOS DeviceSupport

แล้วกดลบโฟร์เดอร์ที่มีชื่อเป็นเลข iOS version เก่าๆได้เลย สำหรับเครื่องผมนั้นหลังจากลบโฟร์เดอร์ย่อยเหล่านั้นไปผมได้เนื้อที่คืนมา 20 GB กว่าๆเลยทีเดียว

คำเตือน การเข้าไปยังโฟร์เดอร์ที่อยู่ภายใต้ `/Library` หรือโฟร์เดอร์ `/Users/<yourusername>/Library` แล้ว ไปลบไฟล์บางอย่างด้วยตัวเองนั้นเป็นเรื่องที่อันตราย นอกจากไฟล์และโฟร์เดอร์ที่ผมระบุไปข้างต้นแล้วไม่ควรยุ่งกับไฟล์และโฟร์เดอร์อื่นๆโดยเด็ดขาด เพราะบางไฟล์บางโฟร์เดอร์มันสามารถส่งผลถึงการทำงานของ Mac OS และแอพบางตัวได้ ทั้งนี้ผมในฐานะผู้เขียนบทความนี้จะไม่รับผิดชอบใดๆกับการลบไฟล์หรือโฟร์เดอร์ที่ผิดพลาดของผู้อ่านนะครับ

มีเรื่องของ Devices จริงแล้วจะไม่มีเรื่องของ Simulators เลยก็จะดูแปลก สำหรับ XCode Developer ทุกคนที่ขยันอัพเดท XCode version ใหม่ๆอยู่เสมอจะสังเกตได้ว่า ในอัพเดทส่วนใหญ่มักจะมาพร้อมกับ Simulator เวอร์นั้นใหม่ๆด้วย ทุกครั้งที่มี Simulator ใหม่ก็จะมีโฟร์เดอร์ย่อยใหม่ภายใต้ ~/Library/Developer/CoreSimulator/Devices เกิดขึ้นเช่นกัน เมื่อเวลาผ่านไปนานๆเข้าโฟร์เดอร์นี้ก็ใหญ่โตไม่ใช่เล่น นอกจากนั้นโฟร์เดอร์ย่อยเหล่านี้ทำหน้าที่เก็บข้อมูล Settings ต่างๆของเครื่อง Simulator นั้นๆที่เราเคยเรียกใช้ไว้ด้วย

และแน่นอนไม่มีใครสนใจ Simulator เวอร์ชั่นเก่าๆแล้ว ก็สมควรที่จะถูกลบให้หมดเหลือไว้เพียงเวอร์ชั่นใหม่ๆของเครื่องใหม่ๆที่เราต้องการก็พอ

แต่ แต่ แต่ ชื่อโฟร์เดอร์มันชั่งไม่สื่อเอาซะเลยว่ามันคือเครื่องอะไรเวอร์ชั่นอะไร เพราะชื่อโฟร์เดอร์ย่อยเหล่านี้ใช้ UDID ของ Simulator เป็น identifier นั่นเอง ถ้าอยากรู้จริงๆว่าโฟร์เดอร์นั้นเก็บข้อมูลของ Simulator ตัวไหน OS เวอร์ชั่นอะไร สามารถทำได้โดยการเปิดไฟล์ plist ที่อยู่ข้างในโฟร์เดอร์นั้นๆดู

แต่ถ้ารู้สึกว่ามันลำบากแล้วก็อยากจะลบทั้งหมดอยู่แล้ว ก็มีอีกวิธีหนึ่งคือการเปิดแอพ Simulator ขึ้นมา แล้วเข้าไปที่เมนู Hardware > Erase All Content and Settings ก็เป็นการข้อมูลลบทั้งหมดในโฟร์เดอร์ CoreSimulator/Devices ได้เช่นกัน

เครื่องผมนั้นตอนจัดการกับโฟร์เดอร์ย่อยเหล่านี้ไปแล้วได้พื้นที่คืนมาเกือบๆ 10 GB เลยทีเดียว

เพิ่มเติม สำหรับใครที่ใช้แมคเครื่องเดิมมาตั้งแต่สมัย XCode 6 และไม่เคยล้างเครื่องเลยจนถึงปัจจุบัน จะมีอีกโฟร์เดอร์ลับหนึ่งที่ต้องไปจัดการนั่นก็คือ

~/Library/Application Support/iPhone Simulator

มันเกิดขึ้นมาจากจุดเปลี่ยนของ XCode 6 และ 7 ที่ XCode ทุกตัวก่อนหน้า XCode 7 จะใช้โฟร์เดอร์นี้ในการเก็บข้อมูลต่างๆของ Simulator แต่พอหลังจากนั้นก็ย้ายไปอยู่ที่ CoreSimulator แทน ดังนั้นทุกสิ่งทุกอย่างในโฟร์เดอร์ข้างต้นสามารถลบไปได้เลยโดยไม่ต้องลังเล

ของแถม อันนี้ไม่เกี่ยวกับการเป็น Developer แต่สำหรับผู้ใช้งานทั่วไปที่ใช้ iOS Devices ของตัวเอง sync Backup ไว้บนเครื่องแมค ตัวไฟล์ Backup นั้นโดยปกติค่อนข้างมีขนาดใหญ่และก็ไม่มีความจำเป็นที่จะต้องเก็บไว้หลายเวอร์ชั่น การลบไฟล์ Backup เหล่านั้นทำได้โดยการเปิดแอพ iTunes บนเครื่องแมค เข้าเมนู iTunes > Preferences… เปลี่ยนไปที่แทบของ Devices แล้วเลือกลบ Backup ที่ต้องการได้เลย ใครที่ผ่าน iPhone หรือ iPad มาแล้วหลายเครื่องก็อาจจะเจอไฟล์ Backup เยอะหน่อย

แต่ถ้าใครกลัวว่า iTunes จะแสดงไฟล์ Backup ไม่ครบถ้วน หลังจากลบไปแล้วสามารถเข้าไปเช็คได้ที่โฟล์เดอร์ด้านล่างนี้โดยตรงอีกทีก็ได้

~/Library/Application Support/MobileSync/Backup

Cache ทั้งหลาย

ในเซคชั่นที่แล้วเราก็ลบทุกอย่างของ Simulator ไปแล้ว นั่นหมายความว่าพวก โฟร์เดอร์ Documents โฟร์เดอร์ Cache ต่างๆภายในแอพที่เรารันบน Simulator มันก็ได้ถูกลบไปด้วยหมดแล้ว แต่ยังมี Cache อื่นให้ลบได้อีกดังนี้

Caching ของตัวแอพ XCode เอง อยู่ในพาร์ทนี้

~/Library/Caches/com.apple.dt.Xcode

ไฟล์นี้สามารถลบทิ้งไปได้เลยโดยไม่ต้องลังเล เพราะครั้งหน้าที่คุณเปิด XCode ขึ้นมาใหม่มันก็จะสร้างไฟล์นี้ขึ้นมาใหม่และ download หรือจัดการเตรียมของจำเป็นมาให้ใหม่อยู่ดี สำหรับคนที่ทำงานมานานๆแล้วไฟล์นี้อาจจะมีขนาดทะลุไปถึง 4–5 GB กันเลยทีเดียว

นอกจากนั้นยังมี Caching ของ Cocoapods (Dependency Management Tool ยอดนิยมของชาว XCode developer) ที่สามารถลบได้เหมือนกัน เพราะเมื่อเวลาผ่านไปนานๆ dependencies บางตัวบางเวอร์ชั่นที่เก่าๆแล้วไม่ได้ใช้แล้ว ก็ไม่มีความจำเป็นที่จะต้องเก็บไว้บนเครื่องอีกต่อไป

เข้าไปลบโดยตรงเลยที่

~/Library/Caches/CocoaPods/Pods

จะเลือกลบเฉพาะบาง dependencies หรือจะลบไปทั้งหมดเลยก็ได้ พอลบไปแล้วก็น่าจะได้พื้นที่คืนมาประมาณเกือบ 1 GB กันเลย

สรุป

รวมๆแล้วการลบไฟล์ทั้งหมดในข้างต้นทำให้ได้เนื้อที่คืนกลับมาไม่ต่ำกว่า 50 GB สามารถต่ออายุการใช้งานเครื่องแมคของคุณไปได้อีกยาวๆ

บทความหน้าจะพยายามรวบรวมวิธีการเรียกคืน Disk space สำหรับ Android developer และ React Native developer (Node.js developer ด้วย)

--

--