如何安全刪除舊 Xcode Archives,又不丟失崩潰符號
AskClean 團隊 · 更新於 2026-07-31
只有在確認某份 Xcode Archive 對應的 App 版本已停止分發、以後也不再需要它的 dSYM 分析崩潰時,才應該刪除。最穩妥的辦法是在 Xcode Organizer 中逐個檢查,保留所有仍在發行的 App Store、TestFlight、企業或 Ad Hoc 建置,僅把確定退役的歸檔移到垃圾桶。

為什麼 Archives 不能當成 DerivedData 來刪
每次執行 Product > Archive,Xcode 都會生成一份用於分發的建置,並儲存為 .xcarchive 包。它們預設位於 ~/Library/Developer/Xcode/Archives,按日期分組,同時出現在 Organizer 中。一個長期維護的 App,經過多輪候選版本、TestFlight 和正式發布後,很容易積累幾十份歸檔。
DerivedData 是從原始碼重新生成的建置快取,Archive 卻可能儲存著那一次發布的精確二進位檔、建置中繼資料和 dSYM。Apple 說明,dSYM 透過 UUID 與某個二進位檔一一對應。以後即使拿同一個 commit 重新建置,新產物也會擁有不同的標識,無法替代原來的符號檔案。
所以二者的刪除代價完全不同。刪 DerivedData,代價只是下次完整編譯和重新索引;刪錯 Archive,則可能永遠無法恢復那一版的除錯資訊。等線上崩潰報告到來時,呼叫棧裡只剩記憶體地址,無法還原成函式名和原始碼位置。
刪除前,先做一份保留清單
先從 Xcode 入手,不要只看 Finder 裡的日期資料夾。開啟 Window > Organizer,選擇 Archives,再選中對應 App。逐份檢視版本號、Build 號、建立時間和分發狀態;這些上下文比一個看起來很舊的資料夾名稱可靠得多。
先決定什麼必須保留,再決定什麼可以刪除。仍在 App Store 面向使用者的版本、仍在測試的 TestFlight 建置、尚未過期的企業或 Ad Hoc 建置,以及仍處於崩潰分析視窗內的歷史正式版,都應該保留。如果團隊還會重新匯出安裝包、核對簽名或依賴某份已驗證的發布產物,也要把它列入保留清單。
不要因為上傳成功就預設本地 Archive 沒用了。根據平台和上傳設定,Apple 可能已經收到符號檔案,但 Apple 的除錯文件仍建議保留每一份已分發建置的歸檔。本地 Archive 也是把二進位檔、dSYM、版本號、Build 號和匯出記錄連在一起的最清晰憑證。
- 開啟 Window > Organizer,進入 Archives。
- 按 App 整理當前正式版、TestFlight、企業和 Ad Hoc 建置的版本號與 Build 號。
- 確認需要上傳的符號已經上傳;如果團隊有歸檔制度,把不可替代的版本複製到有備份的儲存。
- 只把被正式版取代的候選建置、已放棄的內部版本,以及超出崩潰分析週期的退役版本標記為候選。
- 在 Organizer 中逐個刪除,重新核對保留項無誤後,再考慮清空垃圾桶。
不能只按日期決定去留。舊正式版可能在新版本上線很久後,仍安裝在部分使用者裝置上。
先測量,不要一上來就刪
如果目標是回收磁碟空間,先量出 Archives 到底佔了多少。在 Finder 按 Command-Shift-G,開啟 ~/Library/Developer/Xcode/Archives,切到列表檢視,在「顯示選項」中啟用「計算所有大小」,再按大小排序。整個過程只讀,不會修改任何檔案。
習慣終端的話,可以執行 du -sh ~/Library/Developer/Xcode/Archives 檢視總量;用 du -sh ~/Library/Developer/Xcode/Archives/* 檢視各日期目錄。它們只負責測量,不會刪除內容。
.xcarchive 在 Finder 裡是一個包。排查體積時,可以對複製出來的歸檔使用「顯示包內容」,但不要從正式歸檔內部隨意抽走檔案。一個殘缺的 Archive 可能還顯示在那裡,卻已經無法正常匯出或進行符號化。
最穩妥的刪除流程
首選 Organizer,因為執行刪除時,版本號、Build 號和 App 身份都擺在眼前。選中已經確認退役的歸檔,再使用 Delete。相比在 Finder 裡辨認日期資料夾,這一步更不容易誤刪。
只有在 Organizer 無法讀取某個很老或已經損壞的包時,才退回 Finder。找到具體的 .xcarchive,核對 Info.plist 中的版本和建置資訊與審查記錄一致,然後只把這一份移到垃圾桶。不要因為某個日期很早,就整個日期目錄刪除。
先別急著清空垃圾桶。重新開啟 Organizer,確認需要的版本仍在;如果符號化對業務很關鍵,再拿一份代表性崩潰報告做驗證。移到垃圾桶至少留下了一段恢復視窗,而終端永久刪除並不會讓判斷變得更正確。
建立不會無限增長的歸檔策略
好的保留規則以發布狀態為核心,而不是簡單規定「超過 90 天就刪」。仍在分發的全部保留;已經下架但仍接收崩潰報告的正式版,在支援週期內保留;企業建置至少保留到安裝失效;法律、審計、重大事故檢討要求的里程碑版本按制度長期儲存。
團隊最好把它寫進發布清單:Archive 存在哪裡、dSYM 是否已上傳、誰有權限取回、什麼時候進入可刪除狀態。如果把歸檔遷到外接硬碟或雲端儲存,必須真正測試一次恢復和匯出,不能只確認檔案「看起來複製成功」。
每個大版本發布結束後做一次十分鐘審查,比啟動盤爆滿時倉促掃蕩安全得多。急需空間時,先清 DerivedData 和失效模擬器;等 Mac 恢復足夠工作空間,再冷靜審查 Archives。
AskClean 如何處理 Xcode Archives
AskClean 不會把 Archives 標成普通的可重建快取。它會掃描歸檔目錄,逐個列出 .xcarchive,並顯示「不可恢復」的代價提示,讓你審查某一份舊建置,而不是面對「整個資料夾全刪或全留」的粗暴選擇。
最終判斷仍然屬於你。AskClean 可以告訴你哪份歸檔佔空間、把你批准的項目移到垃圾桶,但它不可能替你知道產品的線上支援週期,也無法補回已經丟失的 dSYM。這條邊界是刻意設計的:清理工具應該揭示發布產物,而不是擅自宣佈它已經沒用了。
刪除邊界:哪些能重建,哪些不能
先判斷恢復代價,再考慮檔案年齡和體積。
| 項目 | 預設位置 | 刪除後果 |
|---|---|---|
| DerivedData | ~/Library/Developer/Xcode/DerivedData | 可以從原始碼重建;下次建置和索引會更慢。 |
| Xcode Archive | ~/Library/Developer/Xcode/Archives | 可能一併刪除已儲存的二進位檔、中繼資料和匹配 dSYM。 |
| 單獨匯出的 dSYM | 團隊的發布產物儲存 | 可能是某個已分發二進位檔僅存的符號檔案。 |
| 已退役內部建置 | ~/Library/Developer/Xcode/Archives | 確認不再安裝、不再支援後,才適合進入刪除候選。 |
常見問題
可以把 ~/Library/Developer/Xcode/Archives 整個刪掉嗎?
不能把它當成安全的批次操作。歸檔可能包含線上建置對應的精確二進位檔和 dSYM。仍在分發、仍在測試或仍可能收到崩潰報告的版本都要保留。
刪除本地 Archive 會把 App 從 App Store 下架嗎?
不會。刪除本地 .xcarchive 不會影響已經上傳到 App Store Connect 的版本,也不會刪除使用者裝置上的 App;它刪除的是你自己的發布產物和潛在除錯依據。
重新建置同一個 commit,能生成一樣的 dSYM 嗎?
不能把它當成可靠替代。dSYM 必須匹配已分發二進位檔的 UUID,新建置會產生不同的二進位檔身份,所以應該儲存原始歸檔或對應符號。
需要空間時,應該先刪 Archive 還是 DerivedData?
通常先刪 DerivedData。它可以從原始碼重建,風險更低;Archive 必須按發布版本逐個審查,刪錯後可能失去不可恢復的除錯證據。
參考來源