Xcode Archives 可以刪嗎?安全移除舊建置
AskClean 團隊 · 更新於 2026-11-02
可以刪除舊的 Xcode Archives,但前提是確認該建置已經停用,也不再需要它的 dSYM 來分析當機報告。請在 Xcode Organizer 逐一檢查 .xcarchive,保留所有仍在 App Store 或 TestFlight 上的建置,只把已被取代的封存丟到垃圾桶。

為什麼 Xcode Archives 和 DerivedData 不一樣
封存是執行 Product > Archive 的產物:一份可供發佈的建置,以 .xcarchive 套件的形式保存下來。Xcode 預設把這些套件存放在 ~/Library/Developer/Xcode/Archives,依日期分資料夾,並顯示在 Organizer 裡。長期維護的 App 歷經多次候選版本、TestFlight 上傳與正式版,很容易累積大量封存。
和 DerivedData 不同,封存不只是加快建置用的快取。它可能包含那次建置產生的確切 App 二進位檔、建置中繼資料與 dSYM 檔案。Apple 說明,dSYM 是透過 UUID 與二進位檔綁定的;之後即使用同一份原始碼重新建置,也無法產生可以互換的符號檔,因為新的二進位檔會拿到不同的識別碼。
這個差別改變了清理的規則。DerivedData 可以重新產生,代價只是第一次建置比較慢;刪掉的封存卻可能再也無法原樣重建。如果之後收到那個二進位檔的當機報告,而你手上已經沒有對應的符號,堆疊框架就只會顯示記憶體位址,看不到有用的函式名稱與原始碼位置。
刪除前先盤點
從 Xcode 著手,而不是 Finder。開啟 Window > Organizer,選擇 Archives,再選取對應的 App,逐一檢查每份封存的版本、建置編號、建立日期與發佈狀態。Organizer 能提供日期資料夾名稱看不出來的脈絡。
先列保留清單,再列刪除清單。目前使用者還能取得的每個版本、仍在進行的每個 TestFlight 建置、仍安裝在裝置上的企業或 Ad Hoc 建置,以及你可能還要調查當機報告的任何版本,都要保留封存。如果團隊需要某個已知正常版本的匯出二進位檔、公證紀錄或簽署證明,也要一併保留。
不要以為上傳成功,本機的封存就可以丟了。依平台與上傳設定不同,Apple 可能已經收到符號檔,但 Apple 的除錯指南仍建議為每個發佈出去的建置保留封存。本機封存也是把二進位檔、dSYM、版本、建置編號與匯出結果串在一起最清楚的紀錄。
- 開啟 Window > Organizer,選擇 Archives。
- 選取 App,記下所有仍在使用的正式版、TestFlight、企業或 Ad Hoc 建置的版本與建置編號。
- 確認需要上傳的符號都已上傳;如果保留政策有要求,把無法取代的封存複製到有備份的儲存位置。
- 只把已被取代的候選版本、放棄的內部建置,以及超出當機調查期間的已停用版本,列為刪除候選。
- 在 Organizer 中一次刪除一份候選,確認該保留的項目都還在之後,再清空垃圾桶。
只看日期不是安全的保留政策。新版本推出很久之後,舊的正式版二進位檔仍可能安裝在客戶的裝置上。
測量封存資料夾,但不要改動它
如果目標是磁碟空間,就先測量。在 Finder 按 Command-Shift-G(「前往檔案夾」),開啟 ~/Library/Developer/Xcode/Archives,切換成列表顯示方式,在「顯示方式選項」中勾選「計算所有大小」,再依大小排序。整個過程都是唯讀的,可以讓異常龐大的封存一目了然。
習慣用「終端機」的話,可以執行 du -sh ~/Library/Developer/Xcode/Archives 查看總量;要檢查各個日期資料夾,就執行 du -sh ~/Library/Developer/Xcode/Archives/*,再自行排序輸出結果。這些指令只會測量檔案,不會刪除任何東西。
封存是一種套件,所以 Finder 通常把它顯示成單一項目。追查大小時,可以對複製出來的封存按右鍵,選擇「顯示套件內容」,但不要修改正本套件裡的檔案。挑掉部分內部檔案,可能留下一份看似還在、卻已經無法正確匯出或符號化的封存。
最安全的刪除流程
建議透過 Organizer 刪除,因為操作時 App 名稱、版本與建置編號就在旁邊。選取已確認停用的封存,再使用 Delete。Xcode 會移除該封存套件;視 macOS 與 Xcode 的行為而定,可能會要求你確認。
Organizer 打不開某個很舊或已損壞的套件時,Finder 就派得上用場。前往 Archives 目錄,把 Info.plist 的中繼資料與你的盤點紀錄對照,找出確切的那一份 .xcarchive,只把它丟到垃圾桶。不要只因為日期資料夾的名稱很舊,就把整個資料夾刪掉。
先別清空垃圾桶:等你重新開啟 Organizer、匯出工作流程仍需要的建置,而且在符號攸關業務時,實際把一份具代表性的當機報告符號化之後再說。丟到垃圾桶能留下一段短暫的復原空間;用「終端機」永久刪除只會拿掉這層保險,並不會讓清理更正確。
不會無限膨脹的封存保留政策
實用的政策是依發佈狀態而定,而不是隨意設定的檔案年齡。目前仍在發佈的建置全部保留;最近被取代的正式版,在你仍受理當機報告的期間內保留;企業建置保留到安裝失效為止;法務、客服支援或事故應變政策要求的里程碑版本也要保留。
團隊最好把保留規則明確寫進發佈檢查清單:封存存放在哪裡、dSYM 是否已上傳、誰能取回,以及建置何時可以刪除。如果把封存搬到外接儲存裝置或雲端備份,請實際測試還原,不要假設複製過去的套件就能用。
每個主要發佈週期結束後,回頭檢查這個資料夾。每季花十分鐘檢查,比啟動磁碟滿了才慌忙刪除安全得多。急需低風險的空間時,先清 DerivedData 與過時的模擬器資料;等 Mac 有足夠的工作空間、能冷靜處理時,再檢查封存。
AskClean 如何處理封存
AskClean 刻意不把 Xcode Archives 標成一般的可重建快取。它會掃描 Archives 目錄、逐一列出每個 .xcarchive 套件,並標上「不可復原」的代價警告,讓你逐一檢查舊建置,而不是只能把整個資料夾全刪或全留。
決定權留在你手上。AskClean 能顯示哪份封存佔用了空間,並永久刪除你核准的項目,但它無法知道你的正式版支援期間,也補不回遺失的 dSYM。這條界線是刻意的:儲存空間的自動化應該把發佈產物攤開給你看,而不是默默替你判定它們已經不重要。
封存的刪除界線
先依復原代價分類,再考慮檔案的年齡或大小。
| 項目 | 預設位置 | 刪除後的變化 |
|---|---|---|
| DerivedData | ~/Library/Developer/Xcode/DerivedData | 從原始碼重建;下次建置與建立索引會比較久。 |
| Xcode 封存 | ~/Library/Developer/Xcode/Archives | 移除保存下來的二進位檔、中繼資料,還可能包括對應的 dSYM。 |
| 匯出的 dSYM 副本 | 你的發佈產物儲存位置 | 可能刪掉某個已發佈二進位檔僅存的符號。 |
| 已停用的內部封存 | ~/Library/Developer/Xcode/Archives | 通常要確認該建置已不再安裝、也不再支援,才適合刪除。 |
常見問題
可以把 ~/Library/Developer/Xcode/Archives 裡的東西全部刪掉嗎?
不能當成一次全刪的安全操作。封存可能包含已發佈建置的確切 dSYM 與二進位檔。所有仍在使用的正式版、TestFlight、企業或 Ad Hoc 建置,以及你可能還要調查當機的版本,都要保留。
刪除封存會讓 App 從 App Store 下架嗎?
不會。刪除本機的 .xcarchive 不會移除已上傳到 App Store Connect 的 App,也不會刪除客戶裝置上的 App;它刪掉的是你本機的發佈產物,而重新匯出或符號化時可能還需要它。
重新建置同一個 commit,能重新產生一樣的 dSYM 嗎?
無法產生可靠的替代品。dSYM 必須符合已發佈二進位檔的 UUID,而新的建置會產生不同的二進位檔識別碼。請保留原始封存或對應的符號。
需要空間時,應該先刪封存,還是先刪 DerivedData?
通常先刪 DerivedData。它可以重建,是風險較低的首要目標;封存則值得逐版檢查,因為刪錯一份,可能就失去無法取代的除錯證據。
參考來源