Xcode升级后插件失效

Xcode 的插件大大丰富了 Xcode 的功能,而且有了 Alcatraz ,插件的管理也非常容易,像我这种 Vim 党完全离不开 XVim。但是有个非常恼人的问题:一旦升级 Xcode ,插件就失效!

之前 Xcode 升级到6.2的时候遇到过插件失效的问题,Google 之后把一段很长命令复制到 Terminal 后运行一下即可,当时一看解决了,顿时觉得满足感爆棚,自己可以拯救地球了~就没有再深入,结果升级到6.3时又遇到了。“同样的招式对圣斗士是不能使用第二次的!”,同样的坑对有节操的程序员是不能掉进去第二次的!因此这一次一定要搞清楚为什么会这样,以后再次遇到了如何解决。

问题原因

Xcode 的插件放置在 ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins 目录下,为 .xcplugin 格式。通过 Show Content 可以看到 xcplugin 中存在一个 Info.plist,其中有一项为 DVTPlugInCompatibilityUUIDs,而这就是插件失效的原因。

由于 Apple 没有公开插件开发的相关资料,这里我只能通过命名跟值猜测 DVTPlugInCompatibilityUUIDs 的作用:插件通过 DVTPlugInCompatibilityUUIDs 来指定能够运行此插件的 Xcode 版本。因此,DVTPlugInCompatibilityUUIDs 中存放的是 Xcode 版本对应的 UUID,Xcode 在启动加载控件时,将当前 UUID 同插件 Info.plist 中 DVTPlugInCompatibilityUUIDs 存放的 UUID 数组进行匹配,如果没有匹配项,说明此插件无法在该版本的 Xcode 运行,插件也就失效了。

解决办法

解决办法非常简单:将当前版本的 UUID 加到 DVTPlugInCompatibilityUUIDs 中即可。但是插件比较多(1个及以上)的情况下,一个个的打开修改非常无聊跟低效,作为“懒惰”的程序员,这时候就要用上命令行,让重复劳动自动化。思路为将命令分为两部分:

  1. 通过 find 命令在插件目录下找到所有插件的 Info.plist 文件。
  2. 通过 xargs 命令对上一步的搜索结果进行“for 循环”(就这样理解吧),针对每一个 Info.plist 文件,利用 defaults write 命令将当前版本的 UUID 加到 DVTPlugInCompatibilityUUIDs 中。

此时问题来了,挖掘机技术。。。不对,是如何获取当前版本 Xcode 的 UUID 呢?首先关掉 Xcode,打开 Terminal,输入 tail -f /var/log/system.log,再次打开 Xcode,就能看到如下 log 信息:

[MT] PluginLoading: Required plug-in compatibility UUID 9F75337B-21B4-4ADC-B558-F9CADF7073A7 for plug-in at path ‘~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin’ not present in DVTPlugInCompatibilityUUIDs

可以看到,log 信息表明 Xcode 加载插件失败的原因,并且能够看到当前版本(6.3)Xcode 的 UUID 为 9F75337B-21B4-4ADC-B558-F9CADF7073A7。经过 @Kyrrr 的提醒,有一种更好的方式来获取当前版本 Xcode 的 UUID:通过 defaults read 命令从 Xcode 的 Info.plist 读取 DVTPlugInCompatibilityUUID。

最终的命令为:


1

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`

在 Terminal 中运行上述命令就解决了插件失效的问题,在插件 Info.plist 的 DVTPlugInCompatibilityUUIDs 中也能看到新增的 UUID 了。

原文地址:http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/

时间: 2024-12-16 13:04:10

Xcode升级后插件失效的相关文章

Xcode升级后插件失效问题

摘要:Xcode升级后打开Xcode会提示loadbundle或Skipbundle,一般我们选择loadbudle,Xcode插件依然有效,选择Skipbundle,Xcode插件会失效.有人想装两个版本的Xcode,后装的那个也会出现插件失效的情况. 一.Xcode插件失效原因 并不是升级或重装后原本的插件被删掉了,其实插件还在这个目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins .之所以插件失效,是因为每个插件只

解决 Xcode 升级后插件失效的问题

每次升级Xcode,总是会遇到插件失效,解决方案网上也比较多,下面列举的是本人常用的解决方法:供大家参考: Xcode 5开始,苹果要求加入UUID证书从而保证插件的稳定性. 因此Xcode版本更新之后需要在插件的Info.plist文件中添加Xcode的UUID. 一.首先获取Xcode的UUID: 打开终端,输入:defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 回车会看到下图: 这样

Xcode升级后插件失效的原理与修复办法

Xcode 的插件大大丰富了 Xcode 的功能,而且有了 Alcatraz ,插件的管理也非常容易! 问题原因 Xcode 的插件放置在 ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins 目录下,为 .xcplugin 格式.通过 Show Content 可以看到 xcplugin 中存在一个 Info.plist,其中有一项为 DVTPlugInCompatibilityUUIDs,而这就是插件失效的原因. 由于

xcode升级后, 插件失效修复

1. 首先查看 Xcode 的 UUID,在终端执行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 会得到一串 UUID 码 2. 找到 Xcode 插件所在的目录 /Users/"你的计算机name"/Library/Application Support/Developer/Shared/Xcode/Plug-ins 选择已安装的插件如:VVDocumenter-Xcod

Xcode升后插件失效

Xcode升后插件失效,与添加插件不小心点击Skip Bundle解决办法 字数267 阅读4731 评论1 喜欢12 今天升级了xcode到6.4 发现之前装的插件不能使用了.这里有一个解决的方案: 步骤如下: 一.查看Xcode的UUID 在终端执行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 复制UUID后面那一串字符串 然后打开xcode插件所在的目录:~/Library/A

Xcode升级后插件失败解决方法

大家都知道每次升级Xcode 然后插件都不能用了,最根本的原因是每一个插件都有个Info.plist文件,这个文件里有个key-DVTPlugInCompatibilityUUIDs记录了能够使用该插件的Xcode的UDID,因此每次升级Xcode,Xcode的UDID都会变 ,所以升级后的Xcode就使用不了原来的插件了. 因此仅仅要我们更改每一个插件的Info.plist中DVTPlugInCompatibilityUUIDs相应的UDID就能够再次使用了,怎样获取Xcode的UDID呢,相

解决Xcode更新后插件失效的问题

更新Xcode后插件可能会失效,首先要确保插件是兼容新版本的,如果插件自身已经不兼容就没办法了. 如果插件本身可以工作,但你在启动时点击了skip bundle,那你是无法通过正常途径来重新加载插件的. 此时你可以这样做: 1. 退出Xcode,进入下面目录: cd ~/Library/Application\ Support/Developer/Shared/Xcode 2.重名名插件目录,目的是让Xcode无法识别它: mv Plug-ins Plug-ins.foo 3.然后启动Xcode

Xcode升级导致插件失效的解决办法-b

作为iOS界的攻城师,每一次水果发布新的Xcode开发版本时,我们都会跟进,然而那些好用的Xcode插件都会莫名的失灵...对此我各种百度,在这里,我将跟大家分享我是如何解决这些问题的.当然,我的方案是建立在前人的基础上完善的 方案一 首先查看 Xcode 的 UUID,在终端输入 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 如图: DVTPlugInCompatibilityUUI

Xcode升级导致插件失效的解决办法

每次升级Xcode 插件都不翼而飞了,让我们这些酷爱插件的程序员很是头疼,今天就学习了下如何简单快速的恢复上个版本已有的插件 通过终端打印xcode的UUID,然后加入到插件中的的info.plist文件中的 接下来是详细的步骤 1.关闭Xcode. 2.打开终端,输入:tail -f /var/log/system.log 3.别关闭终端,此时重新打开Xcode,就会看到终端不断的打印出log内容 [MT] PluginLoading: Required plug-in compatibili