美文网首页iOS开发新发现ios 程序猿Family
兼容-记录Xcode8.0恢复插件全过程

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

作者: 進无尽 | 来源:发表于2017-01-20 16:55 被阅读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 签名保护

    • 复制一份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

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

    参考文章
    参考文章

    相关文章

      网友评论

        本文标题:兼容-记录Xcode8.0恢复插件全过程

        本文链接:https://www.haomeiwen.com/subject/zajsmttx.html