给Xcode8安装插件
背景
Xcode8以后安装以前Alcatraz上的插件就行不通了,不过网上也有很多方案,主要是重新给Xcode签名。这里把这些文章做一个汇总。
在Xcode8以后,苹果为了安全性(比如防止再次出现XcodeGhost事件),把Xcode增加了签名校验,不会再加载以前Alcatraz下载的插件。并给出了自己的插件机制(Xcode Source Editor Extension),但是这个插件机制实用性很低。所以很多人就想着要继续使用以前的插件。
现在的主流方案是是把Xcode复制一份,一个没有重签名,用来打包上线。另外一份重签名后,重新使用以前的插件,仅仅用来写代码。下面就来说说如何进行Xcode重签名、以及如何让以往的插件能在重签名的Xcode上跑起来。
Xcode重签名
- 创建自签名证书
打开钥匙串,创建新证书,名称填XcodeSigner,证书类型选择代码签名(名字里面尽量不要包含空格,免得在命令行容易出错) 复制Xcode。这里因为要留一份未重签名的Xcode来打包,所以这里先复制一份,并重命名为XcodeSigner
给Xcode重签名(这里的Xcode已经重命名为XcodeSigner)
sudo codesign -f -s XcodeSigner /Applications/XcodeSigner.app
经过上面这些步骤Xcode就已经被重签名了,什么?你说为什么三步,能一步到位吗,恩、问得好。还真有一步到位的解决方案。
MakeXcodeGr8Again把上面说的这三步合在了一起,并提供了CLI和GUI两种使用方式。一步到位!
运行重新签名过后的Xcode很多人会发现以前的插件还是没有工作。这个问题在以前就有。原因是插件的DVTPlugInCompatibilityUUIDs
包含了可运行的Xcode版本id,Xcode更新以后需要把新Xcode的id添加到插件的DVTPlugInCompatibilityUUIDs
中。
把Xcode id加入DVTPlugInCompatibilityUUIDs
获取Xcode的uuid
Xcode的Info.plist里就保存了自己的uuid。可以
右键点击Xcode
->显示包内容
->Contents/Info.plist
->复制DVTPlugInCompatibilityUUID
来获取也可以通过
defaults read /Applications/Xcode.app/Contents/Info.plist DVTPlugInCompatibilityUUID
命令来获取把uuid加入插件的DVTPlugInCompatibilityUUIDs
Xcode插件放在~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
为xcplugin格式。通过显示包内容可以看到xcplugin中有个Info.plist
,DVTPlugInCompatibilityUUIDs字段就是。
把uuid更新到插件中需要两步,但是!插件有很多个,一个个来肯定要把人逼疯,这里当然有all in one的解决方案。
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` |
这个命令主要做了这些:
通过find
在插件目录下找到所有插件的Info.plist文件。
通过xargs
对上一步的搜索结果进行枚举,针对每一个Info.plist文件,利用defaults write
命令将当前Xcode版本的uuid加到DVTPlugInCompatibilityUUIDs中。