如何彻底卸载 Mac 应用,又不误删共享数据
结构简单的应用拖进废纸篓,通常就卸载得差不多了。VPN、驱动、虚拟化工具等软件还会安装辅助程序、系统扩展、登录项或共享容器。卸载时要移除软件本身,同时保住文档和其他应用仍在使用的数据。
为什么拖进废纸篓后仍有残留
.app 是应用主体,运行后产生的偏好、缓存、支持文件和后台项目会写到其他目录。删除应用包不会带走这些内容。
小型应用可能只留下几个偏好文件,浏览器、游戏、开发工具和媒体应用则可能留下数 GB。大小不能说明能否删除,其中可能有缓存,也可能有配置、项目、消息、插件和离线内容。
会改动系统的软件,优先使用厂商卸载器
VPN、杀毒软件、音频驱动、虚拟化软件、云同步客户端、输入设备工具和带系统扩展的应用,更适合交给厂商卸载器,只有它知道停用扩展、卸载特权服务和清理安装凭据的完整顺序。
开始前导出设置或本地数据,并检查订阅、设备授权是否要另外解除。Apple 的卸载应用说明也建议优先使用自带卸载器,并提醒删除应用不会取消订阅,也不会删除用它创建的文档。
应用残留通常藏在哪里
在 Finder 中按住 Option 打开“前往”菜单,可以进入个人“资源库”。常见位置有:
~/Library/Application Support/:支持数据,常是最大的残留~/Library/Caches/:通常可以重建的缓存~/Library/Preferences/:.plist设置文件~/Library/Containers/和~/Library/Group Containers/:沙盒数据与共享容器~/Library/Logs/:应用日志~/Library/Saved Application State/:窗口和会话状态~/Library/LaunchAgents/:登录后运行的后台代理
与系统结合较深的软件还可能在 /Library 中安装内容,这也是厂商卸载器更合适的原因。群组容器可能被同一开发者的多个应用和扩展共用,只有确认没有其他使用者时,删除才不会伤到同厂应用。
用 Bundle ID 查找,而不是只看应用名称
macOS 经常用 Bundle ID 命名文件,比如 com.spotify.client。先取得标识符:
osascript -e 'id of app "Spotify"'
mdls -name kMDItemCFBundleIdentifier -r /Applications/Spotify.app
再把 Bundle ID 和厂商名作为搜索线索:
find ~/Library -maxdepth 4 \( -iname "*spotify*" -o -iname "*com.spotify*" \) -print 2>/dev/null
搜索结果只是候选项。逐项检查内容、所属应用和用途。删除偏好设置并非卸载必需步骤,还会让以后重装时无法沿用旧设置。占用很小时可以保留。
如何手动彻底卸载
- 导出重要数据,确认近期备份可用
- 查看厂商说明。应用带辅助程序、扩展、驱动或授权状态时,使用厂商卸载器
- 退出应用及其可见辅助进程
- 简单应用先把
.app移到废纸篓,再检查与 Bundle ID 和厂商精确匹配的文件,区分缓存、配置、项目、数据库与共享容器 - 在 系统设置 > 通用 > 登录项与扩展 中关闭剩余的厂商登录项。plist 文件名与 launchd 标签未必相同,单靠名称猜测容易处理错对象
- 只有厂商明确要求时才重启。测试相关应用、文件类型、设备和同步功能后再清空废纸篓
更快也更稳妥的做法
专门的卸载工具可以解析 Bundle ID,汇总可能相关的资源库文件。Mole 会先展示候选项和大小,校验路径,再把普通文件移到废纸篓。它能减少搜索工作,但不能取代厂商卸载器,也不会自动删除共享容器。
安全卸载器在内部如何工作
Mole 命令行版与 Mac App 的实现彼此独立,但都把卸载分成发现、检查和确认执行。下面是 Mac App 的流程。
Bundle ID 只有符合反向域名格式时才参与匹配,避免异常输入放大搜索范围。扫描器会读取内嵌登录项 Info.plist 中的标识符,不从文件名猜测。
用户批准计划后,应用才退出目标程序并停止精确匹配的辅助进程。启动项要先通过 PathGuard,DeletionExecutor 也会在移到废纸篓前再次校验每个 URL。不存在、受保护或被拒绝的路径会明确记为跳过。
一条可复用的安全卸载原则
系统集成软件用厂商卸载器。普通应用先删除程序包,再按身份和数据类型检查残留。文档、配置、数据库和群组容器在归属确认前保留。删除内容先留在废纸篓,验证相关应用和服务正常后再清空。