兼容-记录Xcode8.0恢复插件全过程

前言

Xcode 的插件大大丰富了 Xcode 的功能,而且有了 Alcatraz ,插件的管理也非常容易,但是有个非常恼人的问题:一旦升级 Xcode ,插件就失效!终于有时间来写下自己恢复Xcode8.0插件的全过程了。也算无语,我在回复插件的时候尝试了两个不同的方法。不管怎样最后还是回复了插件的使用了。


Xcode8为什么禁止外来插件

我们可以看到在Xcode8中支持了开发插件工程,并且为我们提供了一个插件模板,开发的插件可以上传到App Store下载。苹果这么做有一个原因在于,之前Xcode和插件是运行在同一个进程的,所以插件的崩溃也会导致Xcode崩溃。苹果现在将插件作为一个单独的应用程序,分开进程运行,不会对Xcode带来其他影响。


插件的工作原理

让我们首先了解下,插件是怎样在Xcode中其作用的。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 运行,插件也就失效了。

Snip20161208_6.png

Snip20161208_7.png

解决办法:将当前版本的 UUID 加到 DVTPlugInCompatibilityUUIDs 中即可。更多查看

一.通过xcode_plugins 破解Xcode 签名保护

  • 复制一份xcode8出来,对其进行unsign.

  • 然后用这个unsign的xcode继续愉快的和插件玩耍;( 通过update_xcode_plugins这个库)

  • 当我们需要打包的时候,我们可以继续回到安全的xcode上工作。

可以参考:update_xcode_plugins里面有很详细的步骤
需要注意的是里面有一个说明:(if still having problems: sudo gem install -n /usr/local/bin update_xcode_plugins)
当你输入命令行时可以直接输入这里的,我当时输入前面的命令行时有问题,输入这里的才可以。

Snip20161208_8.png

需要说明的是 (Choose which Xode.app you would like to copy and unsign (use arrows) ) 时,箭头指的是键盘上方向键的 上下键!!!!

Snip20161208_3.png

终端输入命令行中报了错:

  • 权限问题


    Snip20161208_1.png

这是因为要执行这些操作时必须有管理员的权限(比如更新软件)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
** 只需要在命令前加上sudo,** 例如:sudo gem install cocoapods即可.sudo是获取管理员权限,现在按照步骤输入管理员密码即可.

  • Unable to download data from http:// ruby.taobao.org/ - bad response Not Found 404..

原因:需要升级http://ruby.taobao.org/https://ruby.taobao.org/
官网中看到:我们已经停止基于 HTTP 协议的镜像服务, 请在配置中使用 HTTPS 协议代替
$ gem sources --add https://ruby.taobao.org/ --remove http://ruby.taobao.org/

二.通过证书重签

我为什么没有详细描述上个方法的步骤?因为那个方法我试过了,但是没有效果!! T_T

下面说的这个方法是有效的,详细介绍下。
这个方法是在Alcatraz的issue里面看到的:https://github.com/XVimProject/XVim/blob/master/INSTALL_Xcode8.md亲测可用,并且修改过后的xcode可用正常打包上架,不必担心

  • 更新Xcode,目前最新版本是8.1;

  • 由于安装插件会影响原来的Xcode打包上传,我们在应用程序里复制一个Xcode,并重命名为XcodeSigner;


    1481074788147366.png

    XcodeSigner

  • 打开钥匙串,创建新证书,名称填XcodeSigner,证书类型选择代码签名(Code Signing);


    1481074627830091.png

    创建证书

1481074640411631.png

填写证书信息

  • 在终端命令中输入:sudo codesign -f -s XcodeSigner /Applications/XcodeSigner.app,耐心等待命令执行完毕。
Paste_Image.png

这里我要说一下,这个时间很长,长的很,反正我当时等了半个小时也没有好,最后下班后放那里回家了,第二天来了,反正是好了。

  • 安装Alcatraz,如果重启xcode没有显示load bundle,在终端运行如下代码 添加xcode8的id给插件 应该可以解决大部分插件的问题

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

PS:有可能在终端输入命令行时会报如下错误提示:

this identity cannot be used for signing code
此时是因为你在生成 证书的时候 证书类型选择的不是 “代码签名”这个类型,导致的错误。

最后

Snip20161209_4.png

最后 1 部分出现了,可是 2部分没有出现。因为Xcode屏蔽了插件,打开插件功能,打开终端:

 sudo /usr/libexec/xpccachectl

然后重启电脑即可生效。一定要重启电脑才行

一些好用的插件

AMMethod2Implement


AutoCompletion

Auto-Importer-for-Xcode

AutoHighlightSymbol

CocoaControlsPlugin


cocoapods-xcode-plugin

extract-localizable-string-plugin-xcode


FastCoding-Xcode-Plugin

FastStub-Xcode







findit-for-xcode

FKRealGroup

HCTemplet

HOStringSense-for-Xcode


JSPatchX

MLAutoReplace




Xcode-Quick-Localization

RTTinyPNGWebAPIPlugin


https://github.com/rickytan/RTTinyPNGWebAPIPlugin/raw/master/ScreenShots/s1.png

https://github.com/rickytan/RTTinyPNGWebAPIPlugin/raw/master/ScreenShots/s2.png

https://github.com/rickytan/RTTinyPNGWebAPIPlugin/raw/master/ScreenShots/s3.png

StringManage



StringsValidator


小结

至此,Xcode8 的插件就可以恢复使用了。

参考文章
参考文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容