原理
在Xcode啟動的時候,Xcode將會尋找位于~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夾中的后綴名為.xcplugin的bundle作為插件進行加載(運行其中的可執行文件),這就可以令我們光明正大合法合理地將我們的代碼注入(雖然這個詞有點不好聽)Xcode,并得到運行。因此,想要創建Xcode插件,我們需要創建Bundle工程并將編譯的bundle放到上面所說的插件目錄中去,這就是Xcode插件的原理。
因為是注入方式添加插件,所以如果插件有問題閃退,那么Xcode也會閃退。
使用之前請先備份Xcode,安裝插件后不可打包上傳Appstore,使用請謹慎!
蘋果為了避免類似 Xcode Ghost 事件的再次發生,Xcode8 禁用了插件機制,而開放了另一種形式:Source Editor extensions,但是這種形式局限性太大。本文介紹Xcode 8 繼續使用插件。
實踐篇
恢復Xcode 8 插件
-
原Xcode 插件安裝目錄
tips:如果遇到插件引起Xcode crash的情況,可在改目錄下刪除對應插件
~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
-
刪除所有原插件
cd ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins rm -rf ../Plug-ins
-
對Xcode進行重簽名
鑰匙串訪問 -> 證書助理 -> 創建證書
名稱:XcodeSigner
身份類型:自簽名根證書
證書類型:代碼簽名
-
期間允許所有權限
sudo codesign -f -s XcodeSigner /Applications/Xcode.app
Alcatraz
Alcatraz 是一個幫你管理 Xcode 插件、模版以及顏色配置的工具。它可以直接集成到 Xcode 的圖形界面中,讓你感覺就像在使用 Xcode 自帶的功能一樣。
安裝和刪除
使用如下的命令行來安裝 Alcatraz:
curl -fsSL https://raw.github.com/alcatraz/Alcatraz/master/Scripts/install.sh | sh
修改UUID
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 DVTPlugInCompatibilityUUID'
如果你不想使用 Alcatraz 了,可以使用如下命令來刪除:
rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin
rm -rf ~/Library/Application\ Support/Alcatraz
重啟Xcode,選擇 load bundles
通過 Alcatraz 安裝插件后,重啟Xcode不出現 load bundles 提示框,執行“修改UUID”,再重啟Xcode。
某些插件無法通過Alcatraz安裝,可直接通過github下載打開。