如何清理 Mac 上的舊 iOS 模擬器執行階段
Xcode 的模擬器執行階段可能占用數 GB,每台虛擬裝置還會累積 App 和測試資料,清理前要先分清這兩種內容。
Xcode 的儲存空間分成執行階段、模擬器裝置、DerivedData、DeviceSupport 和 Archives。它們看起來相近,但管理方式與還原成本不同,應先測量再刪除。
先建立 Xcode 儲存空間清單
Apple 建議在 Xcode 的 Components 設定管理額外平台元件。確認不可用裝置後再執行:
xcrun simctl list runtimes
xcrun simctl list devices
| 類型 | 移除後的成本 | 何時保留 |
|---|---|---|
| 執行階段 | 要重新下載,依賴裝置會不可用 | 測試矩陣或錯誤重現仍需要 |
| 模擬器裝置 | App、鑰匙圈、資料庫與測試狀態消失 | 還要重現問題 |
| DerivedData | 專案重新建置與索引 | 目前建置仍使用 |
| DeviceSupport | 可能失去對應真機版本的離線除錯資料 | 仍連接該裝置或分析相關崩潰 |
| Archives | 可能失去已發行版本對應的 dSYM | 使用者仍可執行該版本 |
為什麼 iOS 模擬器會佔用這麼多空間
執行階段是下載的 iOS、watchOS、tvOS 或 visionOS 系統映像;模擬器裝置是使用其中一個執行階段的虛擬裝置。多台裝置可以共用同一個執行階段,兩者不能當成同一種快取。
如何透過終端機刪除未使用的模擬器
前面的兩條唯讀指令用來核對已安裝的執行階段與裝置,不會刪除任何內容。
在 Xcode > Settings > Components 檢查和移除已下載的執行階段,不要直接刪除 /Library/Developer/CoreSimulator 或 /System/Library/AssetsV2 裡的資料夾。
目前平台的最新版本
開發中的平台至少保留最新執行階段。
仍要重現問題的舊版本
測試計畫、CI 或使用者問題仍指向它時,其價值不只是下載時間。
單獨移除不可用裝置
檢查清單後,這條命令只刪除執行階段已不可用的裝置記錄,不會解除安裝執行階段。
xcrun simctl delete unavailable
清除模擬器快取與 App 資料
只想清除某台裝置的測試狀態時,在 Simulator 中啟動它,再選擇 Device > Erase All Content and Settings。這會重設目前裝置,不會刪除共用的執行階段;已安裝 App、鑰匙圈和資料庫都會消失。
分別管理 DeviceSupport、DerivedData 和 Archives
DerivedData 可重新產生,但整包清空會讓所有專案重新建置和索引。DeviceSupport 可能仍用於實體裝置除錯;已發布版本的 Archives 和 dSYM 可能要用於後續崩潰解析。Mole 可以列出被新版取代的執行階段,並透過 simctl runtime delete 移除選取項,其他裝置和歸檔仍應回到 Xcode 管理。
DeviceSupport 按真機與崩潰需求篩選
資料夾日期舊不代表無用,仍連接的裝置與待分析崩潰決定是否保留。
Archives 按仍在運行的版本保留
使用者仍在使用的版本,要保留對應的封存檔,除非已確認其他地方保存了該版本的建置產物與 dSYM。
可重複的安全清理順序
先退出 Xcode、Simulator 與相關建置,再分別測量五類空間;從 Xcode 設定移除確認不再需要的舊執行階段,檢查裝置清單後才執行 xcrun simctl delete unavailable。DerivedData 只清舊專案,DeviceSupport 依真機與崩潰需求篩選,Archives 在 Organizer 按仍在分發的版本保留。重新測量後,空間足夠就停止。
Mole 的邊界
Mole 只移除 Apple 標記可刪的舊執行階段,不會清空裝置狀態或發行歸檔。
常見問題
刪除模擬器會刪掉我的專案原始碼嗎?
不會刪除專案原始碼,但虛擬裝置中的 App 和測試狀態會消失。
刪除 iOS DeviceSupport 資料夾安全嗎?
不要把整個 DeviceSupport 當成快取。舊系統版本的資料仍可能用於實體裝置除錯或崩潰解析。
Mole 能找到舊的模擬器嗎?
Mole 會列出被取代的已下載執行階段,並透過 simctl 刪除選取項;其他 CoreSimulator 資料夾它不會手動刪,唯一會清的是可重新產生的系統快取 /Library/Developer/CoreSimulator/Caches,而且只在沒有模擬器執行時才清。