重装或清理 Xcode 的完整步骤(详解)

【新增】
一般清理,

  1. 从 App Store 下载安装 DevCleaner ,可以清理掉很多。
  2. 命令行作一般清理
  • xcrun simctl list 列出所有 devices / runtimes 等等
  • xcrun simctl delete unavailable 删除不再可用的模拟器数据(实际删除的是 ~/Library/Developer/CoreSimulator/Devices 的某个子目录,子目录名字是该模拟器的UUID)(包括模拟器配置和安装的 app,不包括模拟器的运行时 runtime)
  • /Library/Developer/CoreSimulator/Profiles/Runtimes,超级占空间的模拟器的 runtime,(用 Finder 或者du -sh *查看占空间情况),Finder 打开文件夹后删除,或者sudo rm -rf 某个具体的模拟器运行时,反正得输入开机密码。
  1. Xcode下载资料的缓存 ~/Library/Caches/com.apple.dt.Xcode,这个目录下的Downloads 子目录可能占了很多空间,建议清空。

【原文】
彻底清理
直接更新Xcode会将配置信息和旧模拟器都保留,有时会产生一些无法推测原因的混乱。
如果你想安装一个全新的Xcode,请按下面的步骤进行:

  1. 删除App
    移除 /Applications/Xcode.app,并从垃圾桶移除(若不清除会影响后续的find结果;如果从 LaunchPad 长按并点叉叉删除则不进垃圾桶);

  2. 找到并删除Xcode的相关文件(文档,模拟器,plug-ins,编译记录)

find / -maxdepth 7 -name Xcode 2>/dev/null 

(命令末尾的 2>/dev/null 是过滤掉没有文件夹访问权限的提示信息)
将找到的目录悉数删除(删除前先确认有没有自定义的名为Xcode的什么文件)

  1. 找到并删除Xcode配置信息,安装记录,Cookie/Cache/CrashReporter,等等
find / -maxdepth 7 -name com.apple.dt.\* 2>/dev/null 

(dt是developer tools的意思,比如Xcode的bundleId是com.apple.dt.Xcode,假定你只安装了苹果家Xcode这一个开发工具)
列出这些目录,其中,/System/Library/LaunchAgents/ 目录下的
com.apple.dt.CommandLineTools.installondemand.plist
这个文件不建议删除(此处不作解释)
(不要手工删除 /var 目录下的内容,重启时应该会自动删除。若发现文件太大,且重启后也不消失,可先移到某个用户目录)

所以安全稳妥的删除方式是,执行下面的两个命令将它们全部删除,
(涉及两个目录,/Library 和 ~/Library,前者是系统目录,后者是用户目录)

find /Library -maxdepth 7 -name com.apple.dt.\* 2>/dev/null -print0 | xargs -0 sudo rm -rf
find ~/Library -maxdepth 7 -name com.apple.dt.\* 2>/dev/null -print0 | xargs -0 sudo rm -rf 

(-print0是将NUL作为分隔符,NUL也就是'/0',而不是空格;-0与此相应)

  1. 谨慎移除名为Developer的系统目录下的内容
find / -maxdepth 5 -name Developer 2>/dev/null 

找到的结果里,有3个值得注意的目录

/Library/Developer
~/Library/Application\ Support/Developer
~/Library/Developer

对于找到的 /Library/Developer 目录,可能包含的3个子目录是:
CommandLineTools,命令行工具,可删除,日后重装不难,
CoreSimulator,模拟器(非常占空间的运行时 runtime),如果你不希望新安装的Xcode使用旧的模拟器,建议一并删除(Xcode的设置菜单里可重新下载)(用 finder 删除或 sudo rm -rf 才行,反正要输入开机密码)
PrivateFrameworks目录,请不要删除,如果要删除,请先将它的名字后加上.bak,在新的Xcode安装成功并能成功编译项目后再行删除——否则,有导致新Xcode无法启动的风险。尚不清楚这个目录是首次安装Xcode时引入的,还是macOS自带的。

~/Library/Application\ Support/Developer 目录下安装的是 plug-in,由于Xcode 早已禁用 plug-in,而推荐 Xcode Extension,所以该Developer目录完全可以删除。

~/Library/Developer 下的3个子目录都可以删除。下面讲这3个子目录的用途:
CoreSimulator,存放模拟器配置数据(下载的模拟器存放在前面讲过的系统目录下,而不是这个用户目录);
XCPGDevices暂不清楚用途,但确认可删,且其子目录结构与 CoreSimulator目录下的任一模拟器相似;
Xcode目录存放一些临时数据,其DerivedData存储编译缓存和每个项目的索引数据,iOS DeviceSupport子目录存放插到mac机上的手机索引信息,如果删除该目录,会导致下次将手机插入mac时不能马上开始调试,而需要等待几分钟。

  1. provisioning profile 目录
~/Library/MobileDevice/Provisioning Profiles

一般不需要清理。
有意思的是,这个目录下的授权证书文件名就是证书的 UUID

security cms -Di xx.mobileprovision | grep -A 1 UUID

就能对比出结果了。

其他参考资料

  1. ios-simulator-simctl
  2. stackoverflow: How to remove old unneeded devices
  3. stackoverflow: Can I delete data from iOS DeviceSupport
  4. delete-temporary-items-private-var-folders-mac-os-x

你可能感兴趣的:(重装或清理 Xcode 的完整步骤(详解))