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/

转载于:https://www.cnblogs.com/congliang/p/4979814.html

Xcode升级后插件失效相关推荐

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

    转载:http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/ Xcode 的插件大大丰富了 Xcode 的功能,而 ...

  2. Xcode版本更新后插件失效解决办法

    打开终端,输入以下代码: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 获取到DVTPl ...

  3. Xcode 升级后,常常遇到的遇到的警告、错误,解决方法

    Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 参考文章: (1)Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 (2)https://www.cnblogs.com/cooka/ ...

  4. Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)

    从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了. 1,警告:"xoxoxoxo"  is deprecated 解决办法:查看xoxoxox ...

  5. Xcode 升级后,cocoaPod 问题

    当我从Xcode 6.3切换到Xcode6.4的时候,因为我是mac上安装了两个不同的版本,现在把Xcode 6.3卸掉了. 现在再次运行pod install命令的时候,提示如下错误:   Upda ...

  6. Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决

    1.android-butterknife-zelezny android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备 ...

  7. Android studio推荐插件以及升级后插件丢失问题解决

    1.android-butterknife-zelezny android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备 ...

  8. xcode更新之后插件失效的解决办法

    打开终端,输入以下代码: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 获取到DVTPl ...

  9. 全网首发!! 黑苹果MacOs12 Monterey升级后蓝牙失效问题

    今天刚装完mac12 开机巨慢 重启开机巨慢 但是被我研究了一番发现是蓝牙问题 跑码的时候一直在显示Bluetooth usb controller之类的  然后开机竟然要10分钟以上,,我就是不用蓝 ...

最新文章

  1. selenium--driver.switchTo()
  2. 华硕fx60vm安装macOS10.13.6和Windows10双系统
  3. vlc生成rtsp流
  4. android touch screen keyboard input移植记录
  5. opencv学习笔记(二):基于肤色的人手检测
  6. JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程
  7. Python requests介绍之接口介绍
  8. edge linux 下载软件,在Linux上安装edge浏览器
  9. php property 获取,JavaScript中如何获取和设置property属性代码详解
  10. 模拟退火算法_Matlab 二维模拟退火算法最优路径(主程序)
  11. RabbitMQ之前的那些事
  12. sql语句select group by order by where一般先后顺序
  13. ASP.NET OAuth 2.0 新手上路
  14. 增长量计算n+1原则_2020黑龙江省考资料分析计算增长量问题.doc
  15. 课程设计 计算机公共基础,基于Moodle大学计算机公共基础课程设计.pdf
  16. 百度 bos php,百度开放云 BOS Uploader
  17. html 插入虾米音乐,虾米音乐导入导出方法
  18. win7系统 邮箱服务器搭建,win7搭建邮箱服务器
  19. Debian本地源的搭建方法
  20. OCX控件在win10下的查看、删除、注册、卸载

热门文章

  1. 你想过同时为两家以上的企业工作吗?
  2. 有人说赚钱靠项目,也有人说赚钱靠技术
  3. SQL 中为什么经常要加NOLOCK?
  4. C语言实现万年历(附代码)
  5. 运行报错SecureCRT: error while loading shared libraries: libjpeg.so.8:
  6. linux 命令行删除分区,如何在 Linux 中删除分区
  7. SQL Server 2016中的查询优化器更改说明
  8. aws cli 使用_学习AWS CLI –使用AWS CLI探索IAM用户,角色,策略
  9. 如何使用SQL Server主数据服务替换硬编码的查找
  10. 如何理解通配符类型参数/协变性/逆变性?