Xcode外掛程式開發入門 —— JTTMagicLine,xcodejttmagicline
下列文章來自於我的印象筆記:https://app.yinxiang.com/shard/s32/sh/86ab7ac1-7507-4c24-bf71-47e3c3f3c217/324316d417864a09dcce657b3b919b8a,如果想看原生格式的話可以直接前往觀看,謝謝。
Xcode外掛程式開發入門 —— JTTMagicLine一、準備工作
首先前往 kattrali/Xcode5-Plugin-Template 下載Xcode 5 Plugins開發的模板檔案。最好git clone吧,方便日後更新。
將下載好的Git倉庫複製到 ~/Library/Developer/Xcode/Templates/Project Templates/Application Plug-in/Xcode5 Plugin.xctemplate,如果沒有對應的子目錄就手動建立,另外最後要把Git倉庫命名為Xcode5 Plugin.xctemplate。
重啟Xcode 5,然後建立一個工程,就可以看到Xcode Plugins類型的工程了:
原來的GitHub介紹頁面中還包括了Usage, Notes, Plugin Debugging三部分。簡單說下:
- Usage: 就是模板工程中的作用——點擊Xcode菜單中的File -> Do Action,彈出一個Hello World的對話方塊。
- Notes:
- 在外掛程式的Xcode工程中也有一個Info.plist檔案,設定該檔案中的XCPluginHasUI為YES,可以關閉外掛程式的功能。
- 為了支援不同的Xcode,例如Xcode 5.0.2, Xcode 5.1.1等,需要設定Info.plist檔案的DVTPlugInCompatibilityUUIDs選項,在其中加入不同的Xcode的UUID。查看Xcode UUID的方法:
defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
- Plugin Debugging: 由於Plugin是無法即時運行看結果的,所以可以通過NSLog(...)查看輸出是否正常,而log出來的結果記錄在/var/log/system.log檔案中,可以使用控制台程式或tail命令查看。
也可以參考這篇文章:Xcode5 Plugins 開發簡介
二、Xcode外掛程式:VVDocumenter
VVDocumenter 是由 @onevcat 喵神開發的一個Xcode外掛程式,其作用是在Xcode中輸入"///"後自動產生規範的文檔注釋,的確非常好用而且實用。
由於本人有著非常嚴重的代碼潔癖,並且希望代碼之間有著清晰的模組關係,所以常常習慣用一整行的"////////////..."來分隔各個代碼模組,從而保持美觀。例如:
單純的#pragma mark - 已經讓我欲求不滿了。
受到VVDocumenter的啟發,決心參考喵神的代碼自己寫一個輸入"mgl"後產生一整行"////////////..."的Xcode外掛程式 —— JTTMagicLine。(這是一個有情懷的外掛程式名)
由於JTTMagicLine的代碼和整體架構都是參考了喵神的VVDocumenter的代碼,所以本小節的標題直接給了VVDocumenter。
三、JTTMagicLine工作原理
在看了半遍VVDocumenter的源碼後,大概弄懂了其原理,然後仿照著弄了個JTTMagicLine。
接下來說下JTTMagicLine的工作原理(和VVDocumenter的工作原理大致相同):
- 在外掛程式程式啟動後,開始監聽NSTextView中文字改變的訊息,也就是監聽Xcode中編輯區中文字改變的訊息。
- 當Xcode編輯區文字改變時,擷取滑鼠當前游標所在行的文字,並和觸發替換事件的字串(例如mgl)做正則匹配
- 如果匹配成功,那麼建立一個鍵盤事件類別來類比各種鍵盤事件:
- Command + delete: 刪除該行
- Command + V: 粘貼要替換的字串,這裡是"///////////////..."
- return: 斷行符號 + 換行,方便懶人開發人員,例如我
- 還原paste board中的內容和各種參數等
四、代碼
已經開源到GitHub中,由於參考了喵神的代碼,所以代碼邏輯還是非常清晰的,有興趣就Download來看看吧:guesn10000/JTTMagicLine
代碼中已經寫了注釋,還是比較易懂的。
工程中有一個TODO.h,明顯還是有很多問題或功能沒有完善的,例如設定面板、Command + Z的問題等,我會繼續完善的。
五、Build and Use xcplugin
在編寫好代碼後,Build一下,可以在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目錄下看到產生的xcplugin檔案:
如果你嫌每次都要跳到那個目錄太麻煩或者記不住外掛程式目錄的路徑的話,可以像我一樣弄個alias到.zshrc或.bash_profile中(具體看不同的shell吧):
alias cdxcplugins='cd ~/Library/Application\ Support/Developer/Shared/Xcode/Plu$alias cdoxcplugins='cdxcplugins;open .'
好吧,重啟Xcode。
在Xcode的文字編輯區中輸入mgl,啦啦:
大功告成。
六、不足
其實最後一小節可以叫Issue,該外掛程式在我寫這篇博文的時候用了半天來搞,還有很多功能沒有完善,我記住TODO.h中了:
#ifndef JTTMagicLine_TODO_h#define JTTMagicLine_TODO_h/* 1.增加設定面板,可以設定替換的字串和觸發替換事件的字串,關閉該外掛程式的功能等 2.修複Command + Z無法恢複某行字串的問題,參考VVDocumenter 3.增加對Xcode 6的支援 */#endif
我會繼續完善的,例如:先回頭深入看下Regex再去看喵神的源碼,然後再回來改進JTTMagicLine等。這個還是看心情吧,因為這個外掛程式暫時性地滿足了我的需求。
為興趣而Code,多嘗試新的東西。
大家解答xcode開發入門問題
正常情況下XCODE建立項目時應片所示。
IOS下可建立iphone/ipad項目,如IOS - Application - Single View Application
如果LZ說的是壓根沒有IOS這一模板,那這種情況比較詭異。
請確認你的xcode不是beta版。
IPHONE 4應用程式開發入門與實戰這本書裡面用到得開發軟體是不是 xcode4 這個版本?
XCode4.2和4.3介面不一樣的啊。其實就多幾個外掛程式,介面變一下而已,如果不是搞JNI開發或UIWebView中用php(兩者都是iMac應用開發),都一樣的。iPhone不支援JNI什麼的,只要熟悉下,問題不大的。
iPhone 4應用程式開發入門與實戰,這本書的介面好像是4.1.3的,現在已經下不到了。