Xcode更新或者重新安装导致插件无效问题的解决方案

该博文内容来源于网络,原链接:http://www.cnblogs.com/zhanglinfeng/p/4962452.html

Xcode 升级后打开 Xcode 会提示 load bundle 或 Skip bundle,一般我们选择 load budle,Xcode 插件依然有效,选择 Skip bundle,Xcode 插件会失效。有人想装两个版本的 Xcode,后装的那个也会出现插件失效的情况,而且重装插件也没用。

Xcode 插件失效原因

并不是升级或重装后原本的插件被删掉了,其实插件还在这个目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 。之所以插件失效,是因为每个插件只供特定 UUID 的 Xcode 使用,更新后 uuid 改变,于是便不能正常使用。

解决办法

1.查看当前 Xcode 的 uuid

在终端执行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID,会得到一串 UUID 码。可能你的 Xcode 不是你安装的,而是直接拷贝别人安装好的 Xcode 到你的应用程序中,那么这个命令得不到 Xcode 的 uuid,会出现”The domain/default pair of (/Application/Xcode.app/Contents/info, DVTPlugInCompatibilityUUID) does not exist”的错误

另外一种办法也能得到 Xcode 的 uuid,在应用程序中找到 Xcode,右键选择显示包内容,找到 Info.plist 文件打开找到 DVTPlugInCompatibilityUUID 对应的值就是我们要的 uuid

2.修改插件的 uuid 为当前 Xcode 的 uuid

找到这个目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins,找到对应的插件,右键显示包内容,找到 Info.plist 文件打开找到 DVTPlugInCompatibilityUUIDs 的项目,添加一个 Item,Value 的值为之前 Xcode 的 UUID,保存。

3.重启 Xcode

重启 Xcode 之后会提示”Load bundle”、 “Skip Bundle”,这里必须选择”Load bundle”,不然插件无法使用。如果又不小心点了 Skip Bundle,那就删掉你刚才在插件 plist 文件里添加的那行 Item,然后重启 Xcode,然后再重新刚才的那几步。至此问题已经完美解决。那么有人会问:如果很多个插件都失效,不想一个一个的改,有没有快速的方法,有,请看下一步。

批量更新插件的 DVTPlugInCompatibilityUUID 的命令

在终端不能用命令 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 得到 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 DVTPlugInCompatibilityUUID

其他

1.建议使用批量命令的方式来解决,简单暴力

2.针对于安装两个版本的开发者来说,可以根据其原理将第二个 Xcode 的 UUID 手动添加到插件的 info.plist 当中(未验证)