首先,解决方案:
$ curl -s https://raw.githubusercontent.com/ForkPanda/RescueXcodePlug-ins/master/RescueXcode.sh | sh
托管地址:Github
如果对原理不感兴趣的,以上就是博客内容。
下面来定位一下问题
1.Xcode 升级之后,我发现了一些问题
- 安装的插件莫名消失了。
- Xcode 没有任何提示。
- 在目录
~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
插件文件还在。
于是我用 tail 命令检查了一下系统日志
$ tail -f /var/log/system.log
然后打开 Xcode ,得到了几条我们感兴趣的信息:
Xcode[597]: [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin' not present in DVTPlugInCompatibilityUUIDs
日志很明显,说我们的 Xcode 在载入插件的时候,需要一个 UUID ,但是插件在 DVTPlugInCompatibilityUUIDs 里面并没有提供。
通过同性交友网站 Github 的各种 Issue 和 StackOverflow 的经验来看,我们需要到每一个 Info.plist 里面去添加一个 UUID 即可解决问题了。
find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add defaults read /Applications/Xcode.app/Contents/Info.plist DVTPlugInCompatibilityUUID
然后重置一下 Xcode 第三方插件列表。
ls=`defaults read com.apple.dt.Xcode | grep -o 'DVTPlugInManagerNonApplePlugIns-Xcode-[^\"]*'`
for x in $ls; do
defaults delete com.apple.dt.Xcode $x
done
[^\"]*
是正则,匹配到第一个引号处,请详见 Google。
知道解决方式之后,我本着爱护伸手党的原则,将这个写成了一个脚本,托管于 Github 。这样你就可以按照文章开头的部分,使用一行的 shell 来完成