Xcode6外掛開發入門

發表於2015-05-09

Xcode提供了所有你建立一個App需要的功能。但是由於其不開源以及沒有製作Xcode-Plugin相關的文件,在我們需要新增一些自己的想法和功能的時候變得缺乏靈活性。 但是我們可以通過一些非官方的手段來擴充套件我們自己的Xcode,並且分享給別人使用。

Xcode Plug-in能做什麼

太多了,我們可以自動生成程式碼註釋(VVDocumenter),我們可以在程式碼編輯器中直接顯示我們初始化的UIColor的顏色(ColorSense-for-Xcode),我們也可以在程式碼編輯器中直接顯示我們要新增到UIImage的圖片(KSImageNamed-Xcode),我們還可以調整控制檯的顏色,修改程式碼樣式,等等等等….

我們還可以用Alcatraz來管理我們的外掛,簡直方便!

Xcode Plug-in放在哪

所有的Xcode Plug-in都會放在一個叫~/Library/Application Support/Developer/Shared/Xcode/Plug-ins檔案目錄下,並且所有的外掛都會以.xcplugin作為字尾。

開發自己的Xcode Plug-in

準備工作

進入開發

我們新建一個Xcode Plug-in模板的工程,可以看到模板為我們生成了好多程式碼。看與你工程同名的檔案的initWithBundle方法。閱讀一下後你就可以知道模板為我們填充了一個在Edit中新增一個Do Action的按鈕,點選後會回撥doMenuAction方法。

我們可以run一下我們的工程,你會發現啟動了一個新的Xcode,因為我們做的是Xcode外掛,啟動的當然是Xcode,用Xcode編寫Xcode的程式碼,是不是很有意思。試試點選新的Xcode的Edit有一個Do Action按鈕,點選Do Action按鈕,再回撥中打個斷點,看有沒有回撥你的方法。

DVTPlugInCompatibilityUUIDs

是的,你會發現你的回撥方法木有呼叫,木有呼叫啊,什麼鬼!其實這是因為你的外掛不認識你正在跑的Xcode的版本,把你的Xcode版本介紹給它認識就好了。

竊聽Xcode通知

因為Apple至今也沒有公開Xcode Plugin的文件。所以我們需要通過一些其他的思路尋找方法。比如竊聽我們在操作Xcode的時候Xcode發出的各種通知。

將這行程式碼加入到我們的工程初始化中

這樣我們就可以監聽我們在對xcode做操作的時候xcode發出的所有通知了。跑一下,是不是通知刷刷的來了。。。

實現一個Xcode外掛功能

尋找需求

既然我們都知道了這麼多通知,我們是不是可以通過抓取其中某一個通知動手優化下Xcode呢。現在Xcode外掛辣麼多,好多我們們能想到的功能,其實用心在網上google一下,都能找到。鑑於入門,那麼我們來坐一個比較簡單的功能吧。

比如我們在xcode檔案導航區域要顯示這個檔案在Finder中的位置的時候,我們需要在這個檔案中右鍵點選,然後在展示列表中點選show in finder,而且這個show in finder按鈕還沒有快捷鍵。要是能有個快捷鍵能夠快速開啟就好了。

構思實現

talk is cheep,show u the code

1.我們需要監聽檔案導航區域選中的檔案改變時候的通知,然後儲存當前選中的檔案的路徑

根據之前監聽xcode通知,我們會發現一個叫transition from one file to another這個通知,這就是我們需要的選中檔案改變時候的通知。

我們將這個通知給我們的檔案路徑儲存下來,為什麼要substringFromIndex:7,因為返回的URL是file:///User........格式的,需要切換成/User...的格式。

2.我們需要新建一個NSMenuItem,然後設定我們需要的快捷鍵。

這個比較簡單修改下模板幫我們生成的那幾行程式碼,加入快捷鍵就可以

objective-c

關鍵在於這兩行:

這裡的快捷鍵就是shift + F,讀者可以根據自己的方式修改。

3.當我們按下快捷鍵的時候開啟我們的workspace,並且選中到指定的檔案。

這個就比較好理解了。把第一步儲存的URL傳遞過去就可以,不過需要做一個URLDecoding,因為xcode給我們的是encode過的URL。

Xcode “API”

Xcode外掛開發已經不是什麼新技術了,所以也有很多開發者dump出了很多Xcode的API。大家可以按需要加入到自己的工程中使用。

Working with projects files

XcodeEditor有一組強大的操縱專案檔案的API,比如inspect headers, list frameworks, add classes等功能。如果你要對你專案檔案進行操作,千萬不要忘記這個庫。

NSTask

NSTask的功能類似像terminal中執行command命令一樣,非常實用。

nstask-tutorial

Cocoa

Cocoa,不是Cocoa touch,應為Xcode是MacOS上的app。所以編寫Xcode外掛會用到很多Cocoa的API,需要了解Cocoa程式設計。

擴充套件閱讀

Xcode5 Plugins 開發簡介

Creating an Xcode Plugin: A Quick-Start Guide

Extending Xcode 6 with plugins

How to create Xcode plugin

相關文章