Xcode 佔用太多空間?刪除 DerivedData、DeviceSupport 和舊模擬器
2026年10月13日更新
Xcode DerivedData 位於 ~/Library/Developer/Xcode/DerivedData,可以安全刪除:裡面只有 Xcode 在下次建置時會重建的建置產物、索引和日誌。結束 Xcode、刪除資料夾,之後的建置和索引只是會花比較久而已。iOS DeviceSupport 和模擬器快取也可以安全刪除;要保留的是 Archives。
WTMemory 是一款可免費檢視的 macOS 選單列 App,能在你做決定之前顯示這些資料夾和它們的大小。文末有詳細說明;這裡的所有做法只用終端機和 Finder 也都能完成。
Xcode 在我的 Mac 上把空間用在哪裡?
幾乎所有東西都在 ~/Library/Developer 底下。刪除任何東西之前先測量:
du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator/* 2>/dev/null | sort -h
近期 Xcode 版本安裝的模擬器執行環境由系統管理,存放在個人資料夾以外,所以上面的指令不會算到它們。請用 xcrun simctl runtime list 檢查。
| 位置 | 內容 | 可以安全刪除嗎? |
|---|---|---|
Xcode/DerivedData | 建置產物、索引、模組快取、日誌 | 可以。下次建置會變慢,也要重新索引。 |
Xcode/iOS DeviceSupport(還有 watchOS、tvOS、visionOS) | 從連接過的裝置複製來的符號檔,每個系統版本一個資料夾 | 可以。接上該版本的裝置時會重新複製。 |
CoreSimulator/Caches | 模擬器快取 | 可以。需要時會重新建立。 |
CoreSimulator/Devices | 每個模擬器,以及裡面安裝的 App 和資料 | 請用 simctl,不要用 rm。模擬器裡的 App 資料會消失。 |
| 模擬器執行環境 | iOS、watchOS、tvOS、visionOS 模擬器的系統映像檔 | 如果你不再在該系統上測試,就可以。可以重新下載。 |
Xcode/Archives | 你封存的建置版本,含 dSYM | 通常不行。符號化當機報告時需要它們。 |
~/Library/Caches/com.apple.dt.Xcode | Xcode App 快取 | 可以,請先結束 Xcode。 |
怎麼刪除 Xcode DerivedData?
請先結束 Xcode。在 Xcode 執行中刪除這個資料夾,可能會讓索引器和建置系統陷入混亂。
rm -rf ~/Library/Developer/Xcode/DerivedData
rm -rf 是永久刪除。如果你想要可以復原的做法,用 open ~/Library/Developer/Xcode/DerivedData 在 Finder 中打開資料夾,把內容拖到垃圾桶。你也可以從 Xcode 進去:Settings > Locations 會顯示 DerivedData 路徑,旁邊的箭頭可以直接打開它。
只想清除單一專案的話,刪除它自己的資料夾就好。每個資料夾以專案名稱加上雜湊值命名,例如 MyApp-abcdefghij。這是處理索引過期、莫名其妙的建置錯誤,以及 clean build 之後仍然出現「No such module」錯誤的經典解法。
你要付出的代價:每個專案的下一次建置都是完整建置,解析到 DerivedData 裡的 Swift 套件要重新抓取,程式碼自動完成和跳至定義在索引完成前都會很慢。你的原始碼不會有任何改變。
Product > Clean Build Folder(Shift-Command-K)不是同一回事。它會移除目前專案的建置產物,但它的索引、其他專案的資料夾和共用的模組快取都會留著。
iOS DeviceSupport 可以安全刪除嗎?
可以。當你接上 iPhone 或 iPad 進行除錯時,Xcode 會把該 iOS 版本的符號檔複製到 Mac 上,以便在該裝置上除錯 App 並符號化當機日誌。你除錯過的每個 iOS 版本都會有自己的資料夾,每個都可能有好幾 GB。依大小列出它們:
du -sh ~/Library/Developer/Xcode/iOS\ DeviceSupport/* | sort -h
刪除你的測試裝置已經不再執行的 iOS 版本資料夾。如果你又接上一台執行已刪除版本的裝置,Xcode 會重新複製符號檔,開始除錯前需要等幾分鐘。watchOS DeviceSupport、tvOS DeviceSupport 和其他同層資料夾也是一樣。
怎麼刪除舊的模擬器?
先關閉執行中的模擬器,再移除執行環境已不存在的裝置:
xcrun simctl shutdown all
xcrun simctl delete unavailable
delete unavailable 只會移除目前 Xcode SDK 無法執行的模擬器,所以是安全的第一步。要看其他的,執行 xcrun simctl list devices,再用 xcrun simctl delete <UDID> 依 UDID 逐一刪除。xcrun simctl erase all 會把所有模擬器重置為原廠狀態但不刪除它們,這會清除已安裝的 App 及其資料。
執行環境通常是最大的項目。列出它們:
xcrun simctl runtime list
然後依識別碼刪除其中一個,或預覽依時間清理會移除哪些:
xcrun simctl runtime delete <identifier>
xcrun simctl runtime delete --notUsedSinceDays 90 --dry-run
清單看起來沒問題後,拿掉 --dry-run 再執行。在 Xcode 中也可以從 Settings > Components(Xcode 15 中叫 Platforms)做同樣的事。SwiftUI 預覽有自己的一組模擬器;xcrun simctl --set previews delete all 會清除它們,Xcode 會再重建需要的部分。
該刪除 Xcode Archives 嗎?
通常不該。~/Library/Developer/Xcode/Archives 裡的每個 archive 都包含 App 建置版本和它的 dSYM 檔。你需要這些 dSYM,才能把那個確切版本的當機報告轉成看得懂的堆疊追蹤,也才能重新匯出或重新上傳該版本。只有在該版本已經不再安裝於任何你在乎的地方,或你已經把它的 dSYM 存到別處(例如當機回報服務)時,才刪除該 archive。請從 Window > Organizer > Archives 管理,這樣可以先看到每個 archive 的版本和日期。
Swift Package Manager 和舊版 Xcode 呢?
- SwiftPM 快取位於
~/Library/Caches/org.swift.swiftpm,需要時會重新下載。刪除它們的代價是下次解析套件時要多花網路時間。 /Applications裡的舊版 Xcode(例如Xcode-15.4.app)常常是最大的單一項目。移除前請確認沒有任何 CI 腳本或xcode-select路徑指向它。~/Library/Developer裡的文件和日誌跟上面那些比起來很小;除非它們在du中顯示很大,否則就別管了。
為什麼 Xcode 的儲存空間會顯示在「系統資料」裡?
macOS 的儲存空間設定會把開發者快取、模擬器執行環境和其他 Library 資料歸入大類別,通常是「開發者」或「系統資料」,所以那個數字很少和單一資料夾對得上。用上面的 du 測量,就能確切知道空間用在哪裡。該類別的其他部分請參考「系統資料」教學。
從選單列檢視 Xcode 快取
WTMemory 會掃描支援的位置,包括 Xcode DerivedData、iOS DeviceSupport 和模擬器快取,並顯示每一項的說明和估計大小。做決定之前,你可以在 Finder 中顯示任何項目。檢視功能免費。
有了 Pro,你可以選取個別項目、在確認視窗中閱讀刪除後的影響,再由 WTMemory 把它們移到垃圾桶。不會自動選取任何東西,也不會永久刪除任何東西:垃圾桶由你自己清空。Archives 不在清理範圍內,所以你的 dSYM 會好好留著。請先結束 Xcode 和模擬器,因為執行中的工具可能會讓快取檔案保持開啟。WTMemory 支援 macOS 12 以上版本,Apple Silicon 與 Intel 皆可使用;Pro 一次付清 $9 USD,最多可用於三台 Mac,並提供七天試用。
常見問題
刪除 Xcode DerivedData 安全嗎?
安全。DerivedData 只存放 Xcode 會重新產生的建置產物、索引、模組快取和日誌。請先結束 Xcode。代價是第一次建置會比較慢,而且每個專案都要重新索引。
iOS DeviceSupport 可以安全刪除嗎?
可以。每個資料夾存放從執行該 iOS 版本的裝置複製過來的符號檔。如果你再接上該版本的裝置,Xcode 會重新複製符號檔,需要幾分鐘。
該刪除 Xcode Archives 嗎?
通常不該。Archives 裡有 dSYM 檔,你需要它們來把已發佈版本的當機報告符號化。只有在該版本已經沒人在用,或它的 dSYM 另外存放在別處時,才刪除該 archive。
怎麼刪除舊的 iOS 模擬器?
執行 xcrun simctl delete unavailable,移除執行環境已不存在的模擬器。整個執行環境則用 xcrun simctl runtime delete,或從 Xcode 設定中的 Components 面板移除。
Product > Clean Build Folder 能釋放同樣的空間嗎?
不能。Clean Build Folder 只會移除目前專案的建置產物。該專案的索引、其他專案的資料夾,以及 DerivedData 裡共用的模組快取都會留著。