前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >兼容-记录Xcode8.0恢复插件全过程

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

作者头像
進无尽
发布2018-09-12 18:27:48
1.1K0
发布2018-09-12 18:27:48
举报
文章被收录于专栏:進无尽的文章進无尽的文章

前言

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屏蔽了插件,打开插件功能,打开终端:

代码语言:javascript
复制
 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 的插件就可以恢复使用了。

参考文章 参考文章

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.01.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • Xcode8为什么禁止外来插件
      • 插件的工作原理
        • 一.通过xcode_plugins 破解Xcode 签名保护
          • 二.通过证书重签
            • PS:有可能在终端输入命令行时会报如下错误提示:
              • 最后
                • 一些好用的插件
                  • 小结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档