安全刪除 Xcode DerivedData 與開發者快取
AskClean 團隊 · 更新於 2026-11-02
DerivedData 是 Xcode 存放建置產物與索引的暫存資料夾,會在不知不覺中長到數十 GB。刪掉它是安全的:先結束 Xcode,刪除 ~/Library/Developer/Xcode/DerivedData 裡的內容,下次建置時 Xcode 會全部重建。本指南會說明這個做法,也涵蓋模擬器、封存與套件管理器快取。

DerivedData 是什麼?為什麼會變得這麼大?
DerivedData 是 Xcode 存放一切「從你的原始碼衍生出來的東西」的地方:建置過程的中間檔、編譯後的產物、模組快取、供程式碼補全與跳至定義使用的符號索引,以及建置記錄。它預設位於 ~/Library/Developer/Xcode/DerivedData,你開啟過的每個專案或工作區各有一個子資料夾。
它會越長越大,原因出在結構上:你開過的每個專案,Xcode 都會建立一個 DerivedData 資料夾——包括只建置過一次、之後再也沒碰過的臨時 clone——而且不會主動刪除。每個資料夾還會依組態與目標(Debug 與 Release、模擬器與實機)分別保存建置產物,所以請實際測量各專案子資料夾的大小,不要預設這台 Mac 能拿回多少空間。
顧名思義,裡面的一切都可以重建——「derived(衍生)」就是這個意思。刪除 DerivedData 絕不會動到你的原始碼、專案設定,或任何納入版本控制的檔案。唯一的代價是時間:每個專案的下一次建置都會是完整的全新建置,背景也會重新建立索引好幾分鐘。
刪除 DerivedData
Xcode 的 Clean Build Folder 指令(Product > Clean Build Folder,或 Shift-Command-K)只會清掉目前開啟專案的建置產物——用來修正莫名其妙的建置問題很好用,但對磁碟空間幾乎沒有幫助。想拿回真正的空間,就得直接刪除 DerivedData 資料夾本身:可以從 Xcode 的 Locations 設定找到它、在 Finder 裡前往該資料夾,或在「終端機」刪除。三種做法,最後的結果都一樣。
逐專案刪除是比較精準的做法:保留你每天都在建置的那兩三個專案的 DerivedData,其餘全部移除。整個資料夾一次刪光則是最快的做法,同樣沒問題——只是所有專案都要一次付出完整重建的代價。
- 先結束 Xcode。Xcode 還在執行時刪除 DerivedData,可能讓它的索引器陷入混亂,被 Xcode 開著的檔案也可能刪不乾淨。
- 找到資料夾:在 Xcode 開啟 Settings > Locations,按一下 DerivedData 路徑旁的小箭頭,就會在 Finder 中顯示它。也可以在 Finder 按 Command-Shift-G(「前往檔案夾」),直接輸入 ~/Library/Developer/Xcode/DerivedData。
- 把專案子資料夾依大小排序,選取要刪除的項目(或按 Command-A 全選),丟到垃圾桶。先丟到垃圾桶是比較安全的習慣——改變主意時可以立刻救回來。
- 若改用「終端機」:執行 rm -rf ~/Library/Developer/Xcode/DerivedData 會一次刪光全部內容。處理超大資料夾時比 Finder 快,但使用前請先讀下方的注意事項。
- 重新開啟 Xcode 並建置。每個專案的第一次建置會明顯變慢,活動列也會顯示「Indexing」一段時間——兩者都只是一次性的代價。
使用 rm -rf 要小心:它會繞過垃圾桶直接永久刪除,無法復原。路徑務必一字不差,做這件事絕對不要加 sudo;如果你對「終端機」不熟,走 Finder 一樣能完成,而且還能救回。
清掉舊的模擬器執行階段
模擬器通常也是開發者儲存空間的一大類別。每個下載過的 iOS、watchOS 或 tvOS 執行階段都各自佔用空間,每台模擬器裝置也會在 ~/Library/Developer/CoreSimulator/Devices 底下保存自己的資料。如果你經歷過幾次 Xcode 升級,請檢查有哪些執行階段的系統版本已經不在你的測試範圍內。
最快的一招是內建的清理指令:在「終端機」執行 xcrun simctl delete unavailable。它會刪除所有標示為 unavailable(無法使用)的模擬器裝置——大多是執行階段已被移除、或舊版 Xcode 留下的孤兒裝置——連同裡面的 App 與資料一起刪掉。執行前先用 xcrun simctl list devices 檢查清單;如果你裝了不只一個 Xcode,更要仔細確認。
至於執行階段本身,請開啟 Xcode 的 Settings > Components(Xcode 14–15 稱為 Platforms)。這裡會列出每個已安裝的模擬器執行階段與大小,選取舊的刪除即可。除非你確實要在舊版系統上測試,否則每個平台只保留最新的執行階段就夠了。
你也可以在 Window > Devices and Simulators 逐台清理模擬器裝置:切換到 Simulators 分頁,在從來不用的裝置上按右鍵——例如那六台存著舊測試資料、型號重複的 iPhone——選擇 Delete。該裝置儲存的資料與 App 會一併刪除。
封存、裝置支援檔案與快取
每次執行 Product > Archive 準備發佈建置,~/Library/Developer/Xcode/Archives 就會多一份封存。每份封存都包含完整的 App 建置與 dSYM 除錯符號,單份常見 100 MB 到 1 GB。刪除前先弄清楚代價:裡面的 dSYM 正是把該版本的當機報告符號化所需的檔案。仍在 App Store 或 TestFlight 上的版本請保留封存(或確認 App Store Connect 已有對應的 dSYM),其餘可以刪除——最穩當的做法是在 Xcode 的 Organizer(Window > Organizer > Archives)裡,對照版本資訊逐一檢查後再刪除。
iOS DeviceSupport 位於 ~/Library/Developer/Xcode/iOS DeviceSupport,存放 Xcode 從每台接過的實體 iPhone 或 iPad 複製來的除錯符號——每個 iOS 版本一個資料夾,通常各佔 2-5 GB。如果你手上已經沒有任何裝置在跑某個 iOS 版本,那個版本的資料夾就只是白白佔空間:刪掉吧,哪天又接上該版本的裝置,Xcode 會重新複製符號(你會看到一次「Preparing debugger support」)。watchOS 與 tvOS 裝置也有對應的同層資料夾。
Xcode 自己的快取放在 ~/Library/Caches/com.apple.dt.Xcode,模擬器的快取則在 ~/Library/Developer/CoreSimulator/Caches。兩者在需要時都會重新產生,但請只在 Xcode 與 Simulator App 都已結束時清理,而且不認得的 CoreSimulator 快取檔案就別動。
套件管理器快取(SwiftPM、CocoaPods、npm、Homebrew)
套件管理器會保留下載過的依賴套件,讓之後的安裝更快。這很實用,但在一台跑過好幾年專案的機器上,也可能累積成一大塊磁碟佔用。這些下載快取都可以重建,只是下次安裝時得重新下載套件。
Swift Package Manager 把下載的套件快取在 ~/Library/Caches/org.swift.swiftpm,各專案解析後的 checkout 則放在各自的 DerivedData 資料夾裡——所以清掉 DerivedData 時,那部分已經一併清掉了。共用快取可以直接在 Finder 刪除,或對該路徑執行 rm -rf。
CocoaPods 把下載的 pod 存在 ~/Library/Caches/CocoaPods。最乾淨的清法是內建指令:pod cache clean --all。專案裡的 Pods 資料夾不會被動到,清掉的只有下載快取。
npm 的快取位於 ~/.npm,在大量使用 JavaScript 的機器上可能長到好幾 GB。執行 npm cache clean --force 即可清空(npm 堅持要加這個參數,是因為這個快取能自我修復、平常根本不需要清;刪掉它是安全的——下次安裝時,套件會重新下載)。用 pnpm 的話,改為執行 pnpm store prune。
Homebrew 會囤積舊的下載檔與過期的套件版本。brew cleanup 會移除過期版本與陳舊的下載檔;全域執行時,還會解除安裝已經沒有任何套件需要的依賴(除非設定了 HOMEBREW_NO_AUTOREMOVE)。brew cleanup --prune=all 則連整個下載快取一起清空。想先知道會刪掉什麼,可以先執行 brew cleanup -n 預演一次。
把例行清理自動化
上面每個方法都有效,但開發垃圾清了又會再來:正常工作一週,DerivedData 就長回來了,快取重新填滿,每次 Xcode 更新又會留下一個用不到的執行階段。如果你不想每個月重跑六套手動流程,這就是值得自動化的部分——但要交給會說明判斷理由的工具,而不是悄悄批次刪除的那種。
AskClean 把開發者檔案當成專屬類別處理:掃描一次,就會逐專案列出 Xcode DerivedData,以及舊的模擬器執行階段(透過 simctl 讀取,每個平台保留最新版)、裝置支援檔案,還有 npm、SwiftPM、cargo、uv 等套件管理器快取。它也找得到新一代的空間大戶——本機 AI 模型:Hugging Face 模型逐一列出,Ollama 模型庫則列為單一項目,而且全部預設不勾選。
每個項目都附上說明——它是什麼、能不能重建、刪掉要付出什麼代價——你確認之前什麼都不會執行。確認後的項目會被永久刪除,不會移到垃圾桶,所以確認前請逐項檢查;你的原始碼與照片圖庫則完全不會被動到。等於把這份指南的清單照做一遍,只是省下一小時的「終端機」操作。
哪些可以重建,哪些不行
這是一張刪除界線表,不代表一定能省下多少空間。任何操作前後,都請測量你的 Mac——《Xcode 模擬器儲存空間》指南裡的唯讀盤點指令碼,可以在不改動任何東西的情況下列出這些資料夾的大小。
| 類別 | 預設位置 | 刪除後果 |
|---|---|---|
| DerivedData | ~/Library/Developer/Xcode/DerivedData | 會重新建置並重建索引;原始碼與 git 歷史不受影響。 |
| 模擬器裝置 | ~/Library/Developer/CoreSimulator/Devices | 所選虛擬裝置裡的 App 與測試資料會消失;請透過 simctl 或 Xcode 刪除。 |
| 封存(Archives) | ~/Library/Developer/Xcode/Archives | 可能刪掉當機報告符號化所需的 dSYM;請先在 Organizer 檢查。 |
| DeviceSupport | ~/Library/Developer/Xcode/iOS DeviceSupport | 該系統版本的裝置再次連接時,會重新複製除錯符號。 |
常見問題
刪除 DerivedData 安全嗎?
安全——這是 Mac 上最安全的大型刪除之一。DerivedData 只包含 Xcode 從你的原始碼產生的檔案:建置產物、模組快取、索引與記錄。你的程式碼、專案檔與 git 歷史都放在別處,完全不受影響。唯一的後果是每個專案的下一次建置都要完整重建,索引也會重新建立。
多久該清一次 DerivedData?
沒有固定週期——大到礙事再清就好,對多數活躍的開發者來說,大約一兩個月一次。有兩個時機永遠值得清:急需磁碟空間的時候,以及某個專案出現無法解釋的建置錯誤、或程式碼補全顯示過時內容的時候——這種情況下,清掉 DerivedData 是標準的第一步。
刪掉 DerivedData 之後,Xcode 會變慢嗎?
短期內會。每個專案的第一次建置都是全新建置,可能比增量建置慢上好幾倍;背景索引也需要幾分鐘,程式碼補全與搜尋才會完全恢復。第一輪過後,效能就和原本一模一樣——DerivedData 存的是快取,不是刪了就永遠失去的最佳化。
那 ~/Library/Developer/CoreSimulator 可以刪嗎?
不能盲目整個刪掉——它存放你目前安裝的模擬器和它們的資料,整個刪除會讓模擬器全部失效,直到你重新安裝執行階段。請改用正確的方式清理:用 xcrun simctl delete unavailable 清掉孤兒裝置(裡面的 App 與資料會一併刪除)、在 Xcode 的 Settings > Components 移除舊的執行階段、在 Devices and Simulators 刪除用不到的裝置;手動清理則只碰 Caches 子資料夾,而且要先結束 Xcode 與 Simulator。
Clean Build Folder 不就是做同一件事嗎?
不是。Product > Clean Build Folder(Shift-Command-K)只會清除目前專案的建置產物,索引、模組快取和其他所有專案的資料夾都原封不動。它是排除建置問題的工具,不是釋放磁碟空間的工具——想拿回真正的空間,就得刪除 DerivedData 資料夾本身。
參考來源