前言
Xcode 的插件大大豐富了 Xcode 的功能,而且有了 Alcatraz 匀归,插件的管理也非常容易坑资,但是有個非常惱人的問題:一旦升級 Xcode ,插件就失效穆端!終于有時間來寫下自己恢復(fù)Xcode8.0插件的全過程了袱贮。也算無語,我在回復(fù)插件的時候嘗試了兩個不同的方法体啰。不管怎樣最后還是回復(fù)了插件的使用了攒巍。
Xcode8為什么禁止外來插件
我們可以看到在Xcode8中支持了開發(fā)插件工程,并且為我們提供了一個插件模板荒勇,開發(fā)的插件可以上傳到App Store下載柒莉。蘋果這么做有一個原因在于,之前Xcode和插件是運行在同一個進程的沽翔,所以插件的崩潰也會導(dǎo)致Xcode崩潰兢孝。蘋果現(xiàn)在將插件作為一個單獨的應(yīng)用程序,分開進程運行仅偎,不會對Xcode帶來其他影響跨蟹。
插件的工作原理
讓我們首先了解下,插件是怎樣在Xcode中其作用的橘沥。Xcode 的插件放置在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 目錄下喷市,為 .xcplugin 格式。通過 Show Content 可以看到 xcplugin 中存在一個 Info.plist威恼,其中有一項為 DVTPlugInCompatibilityUUIDs,而這就是插件失效的原因寝并。
由于 Apple 沒有公開插件開發(fā)的相關(guān)資料箫措,這里我只能通過命名跟值猜測 DVTPlugInCompatibilityUUIDs 的作用:插件通過 DVTPlugInCompatibilityUUIDs 來指定能夠運行此插件的 Xcode 版本。因此衬潦,DVTPlugInCompatibilityUUIDs 中存放的是 Xcode 版本對應(yīng)的 UUID斤蔓,Xcode 在啟動加載控件時,將當(dāng)前 UUID 同插件 Info.plist 中 DVTPlugInCompatibilityUUIDs 存放的 UUID 數(shù)組進行匹配镀岛,如果沒有匹配項弦牡,說明此插件無法在該版本的 Xcode 運行,插件也就失效了漂羊。
解決辦法:將當(dāng)前版本的 UUID 加到 DVTPlugInCompatibilityUUIDs 中即可驾锰。更多查看
一.通過xcode_plugins 破解Xcode 簽名保護
復(fù)制一份xcode8出來,對其進行unsign.
然后用這個unsign的xcode繼續(xù)愉快的和插件玩耍;( 通過update_xcode_plugins這個庫)
當(dāng)我們需要打包的時候走越,我們可以繼續(xù)回到安全的xcode上工作椭豫。
可以參考:update_xcode_plugins里面有很詳細的步驟,
需要注意的是里面有一個說明:(if still having problems: sudo gem install -n /usr/local/bin update_xcode_plugins)
當(dāng)你輸入命令行時可以直接輸入這里的,我當(dāng)時輸入前面的命令行時有問題赏酥,輸入這里的才可以喳整。
需要說明的是 (Choose which Xode.app you would like to copy and unsign (use arrows) ) 時,箭頭指的是鍵盤上方向鍵的 上下鍵B惴觥?蚨肌!呵晨!
終端輸入命令行中報了錯:
-
權(quán)限問題
這是因為要執(zhí)行這些操作時必須有管理員的權(quán)限(比如更新軟件)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
** 只需要在命令前加上sudo,** 例如:sudo gem install cocoapods即可.sudo是獲取管理員權(quán)限,現(xiàn)在按照步驟輸入管理員密碼即可.
- Unable to download data from http:// ruby.taobao.org/ - bad response Not Found 404..
原因:需要升級http://ruby.taobao.org/為https://ruby.taobao.org/
在官網(wǎng)中看到:我們已經(jīng)停止基于 HTTP 協(xié)議的鏡像服務(wù), 請在配置中使用 HTTPS 協(xié)議代替
$ 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可用正常打包上架,不必擔(dān)心
更新Xcode戒傻,目前最新版本是8.1税手;
-
由于安裝插件會影響原來的Xcode打包上傳,我們在應(yīng)用程序里復(fù)制一個Xcode需纳,并重命名為XcodeSigner芦倒;
XcodeSigner
-
打開鑰匙串,創(chuàng)建新證書不翩,名稱填XcodeSigner兵扬,證書類型選擇代碼簽名(Code Signing);
創(chuàng)建證書
填寫證書信息
- 在終端命令中輸入:sudo codesign -f -s XcodeSigner /Applications/XcodeSigner.app口蝠,耐心等待命令執(zhí)行完畢器钟。
這里我要說一下,這個時間很長妙蔗,長的很傲霸,反正我當(dāng)時等了半個小時也沒有好,最后下班后放那里回家了眉反,第二天來了昙啄,反正是好了。
- 安裝Alcatraz寸五,如果重啟xcode沒有顯示load bundle梳凛,在終端運行如下代碼 添加xcode8的id給插件 應(yīng)該可以解決大部分插件的問題
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
此時是因為你在生成 證書的時候 證書類型選擇的不是 “代碼簽名”這個類型,導(dǎo)致的錯誤播歼。
最后
最后 1 部分出現(xiàn)了妻怎,可是 2部分沒有出現(xiàn)。因為Xcode屏蔽了插件绵疲,打開插件功能扰付,打開終端:
sudo /usr/libexec/xpccachectl
然后重啟電腦即可生效。一定要重啟電腦才行
一些好用的插件
AutoCompletion
extract-localizable-string-plugin-xcode
?
小結(jié)
至此,Xcode8 的插件就可以恢復(fù)使用了。