iOS开发新发现ios 程序猿Family

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

2017-01-20  本文已影响236人  進无尽

前言

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 签名保护

可以参考: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

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

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

原因:需要升级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可用正常打包上架,不必担心

1481074640411631.png

填写证书信息

Paste_Image.png

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

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

cocoapods-xcode-plugin

FastCoding-Xcode-Plugin

FastStub-Xcode







findit-for-xcode

HCTemplet

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 的插件就可以恢复使用了。

参考文章
参考文章

上一篇下一篇

猜你喜欢

热点阅读