เหตุการณ์ที่เกิดขึ้นคือ Mac เกิดอาการกระตุก trackpad กระโดด คุมไม่อยู่ เพลงที่เปิดเสียงติดๆ ขัดๆ ตรวจสอบ process CPU เป็นปกติ RAM กินเยอะมาก
เบื้องต้นมีปัญหาเรื่องการอ่าน/เขียน SSD คาดว่าเกิดจาก Spotlight จึงทำการปิดระบบ Spotlight ทั้งระบบไม่ให้ทำงาน
ลำดับเหตุการณ์ที่ทำให้เกิดปัญหานี้ (The Root Cause):
- Flutter Extension ตรวจเจอ Xcode: พอคุณเปิด VS Code ตัวปลั๊กอินเห็นว่าเครื่องนี้มีแอป Xcode ติดตั้งอยู่ (Xcode 26.6) มันจึงเข้าใจว่าคุณต้องการจะพัฒนาแอปสำหรับ iOS ด้วย [1]
- ปลั๊กอินพยายามสั่งเปิด simctl: ปลั๊กอินจึงส่งคำสั่ง xcrun simctl ไปยังระบบปฏิบัติการ เพื่อดึงรายชื่อเครื่องจำลอง iPhone/iPad ออกมาแสดงบนหน้าจอ [1]
- เกิดการ Crash (พัง) เบื้องหลัง: แต่เนื่องจากคุณไม่ได้กดดาวน์โหลดตัว iOS Simulator (Component) เก็บไว้ใน Xcode พอคำสั่ง simctl วิ่งไปหาไฟล์จำลองระบบแล้วไม่เจออะไรเลย มันจึงช็อกและปิดตัวเองลงทันที (Shutting down / Cleaning up ที่เราเห็นใน Log รอบแรก) [1]
- ติดลูปไร้สิ้นสุด: ตัว Flutter Extension ใน VS Code ไม่ยอมแพ้ พอมันเห็นว่ากระบวนการเช็กอุปกรณ์ดับไปโดยยังไม่ได้คำตอบ มันจึงสั่งรันคำสั่ง simctl ใหม่ซ้ำอีกครั้งในอีก 4 วินาทีถัดไป วนลูปไปเรื่อย ๆ จนทำให้ฮาร์ดดิสก์ทำงานหนัก [1]
สรุปคำแนะนำ
การที่เราแก้ปัญหาด้วยการเปลี่ยนชื่อไฟล์ simctl เป็น .bak ไปก่อนหน้านี้ ถือเป็นการแก้ทางที่ถูกต้องและปลอดภัยที่สุดสำหรับกรณีของคุณแล้วครับ เพราะเป็นการบอกตัวปลั๊กอินตรง ๆ ว่าไม่ต้องพยายามไปเรียกหาเครื่องจำลองที่ไม่มีอยู่จริงอีกต่อไป [1]
ตราบใดที่คุณยังไม่ได้ใช้ทดสอบ iOS คุณสามารถปล่อยให้ flutter doctor ขึ้นเครื่องหมาย ! แบบนี้ทิ้งไว้ได้เลย โดยไม่มีผลเสียใด ๆ กับการเขียนโค้ดฝั่ง Android หรือ Web ครับ [1]
แก้อาการอ่าน/เขียน SSD ตลอดเวลาเพื่อยืดอายุ SSD
จัดการกับ Spotlight
- คำสั่งปิดการทำงานทั้งหมดของ Spotlight:
bash
sudo mdutil -a -i off
- คำสั่งเปิดกลับมาใช้งานตามปกติ:
bash
sudo mdutil -a -i on
วิธีปิดการทำงาน mds_stores แบบถาวร
- ปิด
bash
sudo mdutil -a -i off
- ปิดกระบวนการที่ค้างอยู่ทันที:
bash sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist<br />
แก้อาการ launchd ทำงานตลอดเวลาเพื่อ run app simctl
ตรวจสอบว่า launchd ว่ากำลังทำอะไรอยู่ด้วยคำสั่ง:
bash
log show --predicate 'process == "launchd"' --last 1m
พบว่าทุก 4 วินาทีจะทำการ run simctl แต่ไม่สำเร็จ ก็เลยสั่ง run ใหม่ทุก 4 วินาที ทำให้เกิดการทำงานที่ไม่ควรทำขึ้น
หลังจากพยายามมาหลายวิธีก็ยังไม่สำเร็จ จึงจัดการขั้นเด็ดขาดด้วยการ rename ชื่อ app simctl เพื่อไม่ให้ระบบ run app ได้อีกต่อไป
วิธีที่ 1: เปลี่ยนชื่อเครื่องมือค้นหา iOS เบื้องหลัง (เด็ดขาดและตรงจุดที่สุด)
เมื่อคุณไม่ได้ใช้ Xcode และไม่ได้ลงตัวจำลอง iOS ไว้ ไฟล์คำสั่ง simctl ในเครื่องคุณมักจะมาจากโฟลเดอร์ของ Command Line Tools เราจะไปทำการเปลี่ยนชื่อไฟล์หรือตัดสิทธิ์เพื่อไม่ให้ปลั๊กอิน Flutter สามารถหาคำสั่งนี้เจออีกต่อไป:
- เปิดแอป Terminal
- คัดลอกและวางคำสั่งด้านล่างนี้เพื่อตรวจสอบว่าระบบ macOS นำไฟล์ simctl ไปซ่อนไว้ที่ไหน:
bash
xcrun -f simctl
- โดยปกติระบบจะแสดงที่อยู่ไฟล์ เช่น /Library/Developer/CommandLineTools/usr/bin/simctl ให้คุณสั่งเปลี่ยนชื่อไฟล์นั้นเพื่อซ่อนมันจาก VS Code ด้วยคำสั่งนี้ครับ:
bash
sudo mv $(xcrun -f simctl) $(xcrun -f simctl).bak
(ระบบจะให้พิมพ์รหัสผ่านเครื่อง Mac ของคุณเพื่อยืนยัน)
- เมื่อเปลี่ยนชื่อไฟล์เสร็จแล้ว ต่อให้ VS Code หรือตัวปลั๊กอินจะพยายามสั่งรันถี่ยิบแค่ไหน ระบบก็จะขึ้นว่าหาไฟล์ไม่เจอ (Command Not Found) ทันที และลูปทุก 4 วินาทีจะหยุดทำงานอย่างถาวรครับ!
- ตรวจสอบว่า simctl ยังคง run อยู่อีกหรือไม่
bash
log show --predicate 'process == "launchd"' --last 1m
- อนาคตหากต้องทำงานกับ iOS ให้เปิดกลับมาใหม่ เนื่องจากได้ลองปิด services ไปหลายตัวมาก เช่น VSCODE, Flutter อาจะต้องเปิดกลับมาหลายรายการ
bash sudo mv $(xcrun -f simctl).bak $(xcrun -f simctl) flutter config --enable-ios
Relate topics
- Flutter App Guide
- VS Code
- nginx on macOS
- Burn ISO Image to USB on macOS
- ติดตั้ง MSSQL Express ด้วย Docker บน macos M1
- My app on macOS - ใช้แอบอะไรบ้างนะบน macOS
- macOS/Flutter : Exception: Error running pod install
- Hammerspoon: ทดลองเล่นดู
- macOS 12 Monterey: Web Server Setup/Apache/MariaDB/PHP Multiple Versions
- Mirror iPad to a Mac
- Build App & Upload to store
- Flutter :: Package Info for About us
- ทำแอปหลายภาษา
- Flutter Permission
- Flutter App Lifecycle
- My First Flutter App
- Xcode on Mac App Store can't install , show disk space not enough
- Run Flutter บน iPad