解除安裝 Mac App 後,如何清理殘留檔案
同一款已移除的 App,兩款殘留掃描器可能列出不同清單,不一定是哪一款出錯。它們判斷檔案歸屬的方式、保護範圍和可用權限不同,重點不是誰列得更多,而是有沒有誤把其他應用程式和個人資料算進去。
本文講「之後」:App 已經不在,或剛進垃圾桶,怎樣用解除安裝器應有的謹慎去審殘留。App 仍在時的完整流程見徹底解除安裝;工具選型見AppCleaner 之外。
短答案:把 app 拖進垃圾桶只刪掉了程式本體,資料仍留在 ~/Library 的 Application Support、Caches、Preferences 和 Containers 裡;殘留要靠 bundle identifier 歸屬,不能看大小和名稱,刪除前逐項過目,或者用強制這套流程的解除安裝工具。
macOS 上的「解除安裝」實際指什麼
系統並不把 App 當成一個物件配一個刪除按鈕。至少有三層:
| 層 | 常見位置 | 誰來刪 |
|---|---|---|
| 應用程式套件 | /Applications、~/Applications、Setapp 等 |
你、垃圾桶或套件管理器 |
| 使用者支援資料 | ~/Library/… |
殘留掃描或仔細手審 |
| 系統 / 特權 | /Library、助手、收據、延伸功能 |
先原廠解除安裝工具 |
拖進垃圾桶只保證第一層。中間層是通用工具真正能幫忙的地方。第三層它們常常假裝能做、實際做不好:驅動程式、網路延伸功能、特權助手、授權守護程式。Apple 仍建議優先使用原廠 Uninstall 應用程式,原因在此(刪除或解除安裝 App)。
使用者殘留實際在哪
多數第三方殘留集中在使用者資源庫:
| 區域 | 通常是什麼 |
|---|---|
Application Support/<名稱或 ID> |
資料庫、離線包、專案狀態 |
Caches/<bundle id> |
可再生快取 |
Containers/ 與 Group Containers/ |
沙盒主目錄與共用群組 |
Preferences/(含 ByHost) |
設定 plist |
Logs/、DiagnosticReports |
診斷 |
Saved Application State/ |
視窗還原 |
HTTPStorages/、WebKit、Cookie |
該身分的網路狀態 |
LaunchAgents/ |
有 plist 的使用者登入助手 |
Application Scripts/ |
沙盒腳本包 |
/Library 下系統級路徑(LaunchDaemons、PrivilegedHelperTools、/private/var/db/receipts 等)風險更高。優先原廠解除安裝工具;通用掃描在那裡應僅供審核。
沙盒 App 看起來整齊:主容器多在 ~/Library/Containers/<bundle id>。它仍可能用 App Group、Application Scripts、共用快取、CloudKit 或鑰匙圈。沙盒收窄直接寫盤,並不保證「一個目錄搞定」。非沙盒 App 會散落到 Application Support、Caches、Preferences、Logs、Saved Application State、WebKit 與 Cookie。散落越廣,兩款工具越容易意見不一。
歸屬是全部技能
安全的殘留發現鍵在身分,不在行銷名稱。
Bundle id 與顯示名稱
com.example.widget 跨改名與本地化仍穩定。顯示名稱不。兩款產品可共用公司目錄(…/Application Support/Google),而你只卸了一款。用字串比對「Google」是掃描器造出數 GB 誤報的方式。
按 identifier 比對通常能縮小範圍,但仍需檢查共用容器和其他 App 的使用關係;也可能漏掉以產品名稱命名的資料夾。
按名稱比對能找到那些資料夾,也會命中只是共用一個詞的路徑。找得多,也更容易錯。
刪除前的實用檢查:
mdfind 'kMDItemCFBundleIdentifier == "com.example.widget"'
ls /Applications ~/Applications 2>/dev/null
若該 id 仍有任何執行個體,共用支援路徑應按仍在使用處理。
助手與內嵌身分
現代 App 常帶相關 id:com.example.widget.helper、Info.plist 裡 SMPrivilegedExecutables 宣告的名稱、Contents/Library/LoginItems 下的登入項目。徹底的掃描器在 App 消失之前從套件內收集這些 id。套件已不在後,你只剩當時記錄或磁碟上仍精確存在的名稱。
Group 容器
~/Library/Group Containers/ 放的是刻意共用的套件資料:
group.<bundle id>- 團隊前綴如
<TeamID>.<bundle id> - 多個 App 共用的
group.*空間
只有精確擁有者路徑才適合自動關聯。任一兄弟仍在時,共用 group 應僅供審核或不動。這是「找得更多」的工具最容易傷人的類別。
名稱變體與渠道版
Foo Beta 可能留下 Foo Beta、FooBeta,以及其實屬於仍在安裝的正式版的穩定 Foo 資料夾。去掉渠道後綴的基底名稱誤報風險高:除非證明正式版已不在,否則僅供審核。
三條安全入口
1. 先原廠解除安裝工具
安全代理、VPN、音訊驅動程式、終端管理工具知道自己的收據與延伸功能拆卸順序。任何資源庫遍歷之前先執行它們。系統或網路延伸功能由 macOS 註冊,只刪檔案不是可靠的停用流程。
2. App 已經移除後再審
.app 已不在時,掃描仍帶該 bundle id 或精確名稱變體的路徑。保守預設:
- 有歸屬時通常可刪: 快取、日誌、視窗狀態、當機報告
- 仔細審核: Application Support、Containers、Preferences(授權、離線郵件、專案庫)
- 通常保留: 無精確歸屬的 Group Containers、資源庫外的文件、其他 id 仍需要的內容
測量候選:
du -sh ~/Library/Application\ Support/<Name> \
~/Library/Caches/<bundle.id> \
~/Library/Containers/<bundle.id> 2>/dev/null
權限錯誤可能來自缺少完全取用磁碟、檔案權限或其他系統限制,不代表目錄為空。
3. App 剛進垃圾桶的一刻
很多人先拖再想。一個能察覺 ~/.Trash 裡新 .app、讀取 Info.plist 身分、掃描相關支援檔案並開啟審核面板的流程,能讓人不必手動翻資源庫。是否安全取決於幾個邊界:
- 絕不自動刪除垃圾桶裡的應用程式套件(放回必須可用)
- 不對受保護 / AV / MDM 類彈出視窗
- 清理工具自己在解除安裝流程中拖走的 App 要有一次消費型抑制,否則面板會與解除安裝競態
- 以完全取用磁碟為門檻;沒有時不從背景跳出權限要求
不管使用哪種工具,殘留候選都應先審核、預設不勾選;已安裝 App 清單不完整時,應寧可不列出候選,也不要猜測歸屬。一般檔案優先送進垃圾桶,才能保留還原視窗。
孤立項目不是「資源庫裡凡是大的」
要找出已解除安裝 App 的殘留,先列出候選支援目錄,再排除仍被已安裝軟體使用的內容(bundle id、執行中的 App、Launch Services 註冊、廠商根)。若掃描不完整(逾時、無法讀取的目錄),安全的結果是不列出候選,而不是給出一份看似完整的清單。
也要檢查最近的修改時間:上週仍在寫入的設定,可能屬於應用程式清單看不到的 CLI 工具,不能只因找不到 .app 就當作殘留。
實例:兩款工具,同一廠商套件
你卸了產品 A;同公司產品 B 仍在。
- 工具 1(偏 identifier):清單小,多是
com.vendor.productA.* - 工具 2(偏名稱):加上 4 GB 的
~/Library/Application Support/Vendor,以及兩個產品共用的 group 容器
工具 2 看起來更徹底。它提出的刪除可能弄壞產品 B。畫面底部的合計不是品質分,上面的類別才是。
Homebrew 的孤立收據
若 App 來自 Homebrew Cask,只刪 .app 可能留下 Caskroom 記錄,妨礙重裝。檔案殘留處理完後:
brew list --cask
若 token 仍在,用 brew uninstall --cask <token> 清關聯(僅在接受 brew 更廣清理時再依賴 --zap)。App 已不在卻回報「cask 未安裝」是過期關聯,不是手動刪除 Caskroom 隨機路徑的理由。
即使名稱對上也要拒絕
- 仍在安裝的兄弟與渠道雙份
- 共用 group 容器與廠商父目錄
- 未經驗證解除安裝路徑的收據與特權助手
- 資源庫外的使用者文件
- 夾在快取路徑旁的 AI 工作階段與模型目錄(AI 清理)
常見錯誤
把「找到的清單」拉到最長。 候選更多,常常只是歸屬更差。
預設刪 Group Containers。 那是刻意共用的。
對 VPN、防毒、音訊、虛擬化跳過原廠解除安裝工具。
沒有完全取用磁碟就測量, 然後斷定「沒什麼了」。
批次刪殘留後立刻清空垃圾桶。 若有重要東西被誤歸,留一天正常使用更穩。
如何驗證
- 複測已刪路徑
- 確認該 id 的登入項目或 LaunchAgent 已不在(啟動項目)
- 啟動同一廠商兄弟 App
- 確認無誤後再清空垃圾桶
操作順序
- 若 App 有驅動程式、延伸功能或助手,先找原廠解除安裝工具
- 仍在執行時匯出或取消授權(若有需要)
- 結束 App 與可見助手
- 去掉應用程式套件(或確認已在垃圾桶)
- 依身分審殘留;共用容器不動
- 如適用,處理 Homebrew cask 收據
- 項目先留在垃圾桶,正常使用一段時間再清空
解除安裝後第一天該做什麼
很多人卸完就立刻清空垃圾桶。更穩的節奏是:
- 當天只把應用程式套件和已確認可再生的快取送進垃圾桶
- Application Support、Containers 先留著,正常使用一天
- 若兄弟 App、同一廠商的其他產品都正常,再清第二批
- 仍不確定的路徑,用
du -sh記下大小,過一週再決定
垃圾桶佔的是同卷空間,但換來可還原視窗。磁碟已經極端滿時,可以先清可再生快取騰出餘量,再處理爭議路徑。
權限與可見性
沒有完全取用磁碟時,終端機與部分掃描器可能無法讀取容器或部分資源庫目錄。這代表掃描範圍不完整,不是沒有殘留。
建議:
- 確認用途並為終端機或所用工具開啟完全取用磁碟後,再測量一次
- 對比開啟前後
du結果,避免在半盲狀態下做刪除決策 - 撤銷不再使用的工具的完全取用磁碟權限
與「完整解除安裝」文的分工
徹底解除安裝 講的是 App 還在時的順序:原廠工具、匯出、結束、刪套件、再審殘留。本文預設應用程式套件已經不在,重點是判斷剩餘檔案的歸屬與共用關係。
延伸閱讀
- Apple:在 Mac 上刪除或解除安裝 App
- 相關:徹底解除安裝、AppCleaner 替代、清理工具永不該刪什麼
殘留清理的關鍵是證明歸屬、保護共用狀態,並讓刪除可還原。
常見問題
自己動手刪 ~/Library 下的殘留安全嗎?
有歸屬證據才安全:目錄要和 app 的 bundle identifier 對上,不能看大小或相似的名稱,且刪除前逐項過目;猜錯一次就可能帶走別的 app 的資料甚至個人文件。
為什麼 app 會留下殘留?
把程式套件拖進垃圾桶,通常不會一併刪掉應用程式寫在資源庫裡的設定和資料。專用解除安裝程式、套件管理器及系統延伸功能各有處理方式,涉及這些元件時要依原廠步驟操作。
重裝會把刪掉的東西還原回來嗎?
快取和部分預設設定通常會重新產生,但安裝收據不一定由首次啟動建立。文件、聊天紀錄和自訂設定不能靠重裝還原,授權能否重新啟用也取決於產品與帳戶,刪除前要分別確認備份和還原方式。