AskCleanAskClean問淨

安全刪除 Xcode DerivedData 與開發者快取

AskClean Team · Updated 2026-07-18

DerivedData 是 Xcode 存放建置產物與索引的暫存資料夾,會默默長到數十 GB。刪掉它是安全的:先結束 Xcode,刪除 ~/Library/Developer/Xcode/DerivedData 的內容,下次建置時 Xcode 會全部重建。本指南涵蓋這件事,外加模擬器、封存與套件快取。

DerivedData 是什麼?為什麼會變得這麼大

DerivedData 是 Xcode 存放一切「從你的原始碼衍生出來的東西」的地方:中繼建置物件、編譯後的產物、模組快取、供程式碼補全與跳轉定義使用的符號索引,以及建置日誌。它預設位於 ~/Library/Developer/Xcode/DerivedData,你開啟過的每個專案或工作區各佔一個子資料夾。

它會膨脹是結構性的:Xcode 為每個你開過的專案建立一個 DerivedData 資料夾——包括那些只建置過一次、之後再也沒碰的臨時 clone——而且從不主動刪除任何一個。每個資料夾又依組態與目標(Debug 與 Release、模擬器與實機)分別保存建置產物,所以一個中型專案就能佔掉好幾 GB,整個資料夾在日常開發機上常常達到 20-50 GB。

裡面的一切在定義上都可以重建——「derived(衍生)」就是這個意思。刪除 DerivedData 絕不會碰你的原始碼、專案設定,或任何在版本控制之下的東西。唯一的代價是時間:每個專案的下一次建置會是一次完整的全新建置,索引也會在背景再跑幾分鐘。

刪除 DerivedData

有三種做法,殊途同歸。Xcode 的 Clean Build Folder 指令(Product > Clean Build Folder,或 Command-Shift-K)只會清掉目前開啟專案的建置產物——修一次怪異的建置問題很好用,但對磁碟空間幾乎沒有影響。想拿回真正的空間,得直接刪 DerivedData 資料夾本身。

逐專案刪除是外科手術式的選項:留下你每天都在建置的那兩三個專案的 DerivedData,其餘全部移除。整個資料夾一次刪光則是快刀選項,也完全沒問題——只是所有專案的全量重建成本會一次付清。

  1. 先結束 Xcode。Xcode 還在執行時刪 DerivedData,可能讓它的索引器陷入混亂,被 Xcode 開著的檔案也可能刪不乾淨。
  2. 找到資料夾:在 Xcode 開啟 Settings > Locations,點 DerivedData 路徑旁邊的小箭頭,就會在 Finder 顯示它。或者在 Finder 按 Command-Shift-G,直接輸入 ~/Library/Developer/Xcode/DerivedData。
  3. 把專案子資料夾按大小排序,選取要刪的(或 Command-A 全選),移到垃圾桶。先進垃圾桶是比較安全的習慣——反悔了隨時能立刻救回。
  4. 想改用終端機:rm -rf ~/Library/Developer/Xcode/DerivedData 一口氣刪光。處理超大資料夾時比 Finder 快,但使用前請先讀下面的注意事項。
  5. 重新開啟 Xcode 並建置。預期每個專案的第一次建置會明顯變慢,活動列也會顯示「Indexing」跑上一陣子——兩者都是一次性成本。

rm -rf 要小心:它會繞過垃圾桶直接永久刪除,沒有反悔的機會。路徑務必一字不差,做這件事絕對不要加 sudo;如果你對終端機不熟,走 Finder 一樣能完成,而且可以復原。

清掉舊的模擬器執行環境

模擬器通常是僅次於 DerivedData 的第二大空間怪獸。你下載過的每個 iOS、watchOS 或 tvOS 執行環境都佔 5-8 GB,每台模擬裝置又在 ~/Library/Developer/CoreSimulator/Devices 底下保有自己的資料夾。要是你經歷過幾次 Xcode 升級,八成還留著幾年前就不再支援的 iOS 版本的執行環境。

最快的一招是內建清理指令:在終端機執行 xcrun simctl delete unavailable。它會刪掉所有執行環境已不存在的模擬裝置——舊版 Xcode 留下的孤兒——而你還能用的東西一律不碰。

至於執行環境本身,開啟 Xcode 的 Settings > Platforms(舊版 Xcode 叫 Components)。你會看到每個已安裝的模擬器執行環境和大小;選一個舊的刪掉即可。除非你真的要在舊版系統上測試,否則每個平台只留最新的執行環境就夠了。

你也可以在 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 與模擬器 App 都沒在執行,兩者都能安全清除,需要時會重新生成。

套件管理器快取(SwiftPM、CocoaPods、npm、Homebrew)

套件管理器會把下載過的每個相依套件都留著,好讓之後安裝更快。這是好的工程設計,卻是糟糕的磁碟衛生:快取只進不出,在一台跑過幾年專案的機器上,不知不覺就累積到 10-20 GB。它們全都可以安全清除——最壞的情況也不過是下次安裝時重新下載。

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 移除過期版本與陳舊下載;brew cleanup --prune=all 連整個下載快取一起清空。想先看看會刪掉什麼,先跑一次 brew cleanup -n 列出預演清單。

讓它自動化

上面每一招都有效,但開發垃圾是跑步機:正常工作一週後 DerivedData 就回來了,快取重新填滿,每次 Xcode 更新又擱淺一個執行環境。如果你不想每個月重跑六套手動流程,這裡就是值得自動化的環節——但要交給一個會展示推理過程的工具,而不是默默批次刪除的那種。

AskClean 把開發者檔案當成一等公民類別:掃描一次,就逐專案列出 Xcode DerivedData、舊版模擬器執行環境(透過 simctl 讀取,每個平台保留最新版)、裝置支援檔案,以及 npm、SwiftPM、cargo、uv 等套件管理器快取。它也抓得到較新的空間大戶——Hugging Face 與 Ollama 的模型快取——依模型分列,預設不勾選。

每個項目都附解釋——它是什麼、能不能重建、刪掉要付出什麼——而且你不確認就不會執行。刪除進垃圾桶,點錯了只要拖回來就復原;你的原始碼、文件與相片永遠不會被碰。等於本指南的整份清單,只是省下那一小時的終端機工。

FAQ

刪除 DerivedData 安全嗎?

安全——這是 Mac 上最安全的大型刪除之一。DerivedData 只包含 Xcode 從你的原始碼產生的檔案:建置產物、模組快取、索引與日誌。你的程式碼、專案檔與 git 歷史都放在別處,完全不受影響。唯一的後果是每個專案的下一次建置是全量重建,索引也會重跑。

多久該清一次 DerivedData?

沒有固定週期——大到礙事就清,對多數活躍開發者來說大約一兩個月一次。有兩個時機永遠值得清:急需磁碟空間的時候,以及某個專案出現無法解釋的建置錯誤或過期的程式碼補全時——這種情況下,砍掉 DerivedData 是標準的第一步修法。

刪掉 DerivedData 之後 Xcode 會變慢嗎?

短期會。每個專案的第一次建置是全新建置,可能比增量建置慢上好幾倍,背景索引也需要幾分鐘才能讓程式碼補全與搜尋完全恢復。過了第一輪之後,效能就和原來一模一樣——DerivedData 存的是快取,不是什麼刪了就永久失去的最佳化。

那 ~/Library/Developer/CoreSimulator 可以刪嗎?

不能盲刪——它裝著你目前安裝的模擬器和它們的資料,整個刪掉會讓模擬器全數失效,直到你重新安裝執行環境。請正確地修剪它:用 xcrun simctl delete unavailable 清孤兒裝置、在 Xcode 的 Settings > Platforms 移除舊執行環境、在 Devices and Simulators 刪掉用不到的裝置,手動清理則只碰 Caches 這個子資料夾。

Clean Build Folder 不是做一樣的事嗎?

不一樣。Product > Clean Build Folder(Command-Shift-K)只清目前專案的建置產物,索引、模組快取和其他所有專案的資料夾都原封不動。它是建置除錯工具,不是磁碟空間工具——想拿回真正的空間,就得刪 DerivedData 資料夾本身。

Sources