教你如何用Swift編寫Xcode外掛

發表於2016-01-04

GitHub上的原始碼

02.gif

在我的AppCode專案建立過程中,我想念最多的一件事是:能跳轉到記錄控制檯資訊的指定檔案和行。

Xcode不提供這樣的功能,而我不是一個喜歡抱怨的人,所以我決定自己寫個外掛。我用Swift來編寫這個外掛。

想法

如果一個控制檯記錄了fileName.extension:XX 這樣一個名字,轉換成可點選的超連結,這個連結將會開啟指定的檔案並將那行程式碼高亮。

那樣你可以使用自己的記錄機制,只要新增這個簡單的字首,比如:

【程式碼】

或者可以使用CocoaLumberjack,你要想一些好的日誌,可以用我的自定義格式。

Swift版本(Objective-C版本是KZBootstrap的一部分)

實現—主要部分

要實現那些需求我們需要做到兩點:

1、控制檯NSTextStorage fixAttributesInRange–這樣我們可以在找到正規表示式日誌的時候隨時更改屬性。

2、NSTextView mouseDown–這樣在控制檯的連結裡點選滑鼠的時候,我們可以強迫Xcode開啟檔案並高亮那一行。

怎樣把我們的功能注入到那些操作裡去?

簡單調整:

我們如何確定一個NSTextStorage 是控制檯實際的那個?

我們可以觀察IDEControlGroupDidChangeNotification ,找到IDEConsoleTextView 並使用相關物件把儲存標記為控制檯的那個,這個隨後就會排上用場。

我們怎樣找到一個檔案的路徑,而只有日誌中的相對路徑?

我們可以用shell裡的find命令,這就是你如何用swift語言執行且從一個shell命令中檢索響應。

把連結放到日誌中

  • 使用模式匹配來找到日誌裡的事件。
  • 使用shell裡的find命令來檢索工程的完整路徑。
  • 新增自定義屬性來儲存字串本身的資訊。

開啟檔案,然後滾到指定的行

開啟一個檔案像呼叫一樣簡單:

滾到指定的行需要多一些的程式碼:

現在處理NSString比String簡單很多,否則我還得介紹和Range的轉換。

歸因

寫這個外掛比較簡單,因為我能看別人寫的外掛,主要和控制檯有關,如果他們不是開源的,寫這個外掛會比較麻煩。

安裝

用Alcatraz工具然後查詢 KZLinkedConsole, 或者你可以只編譯工程,它就可以自動安裝了。

總結

這是我第一次嘗試寫Xcode外掛,必須說在Xcode工作時除錯Xcode是很有趣的一件事。

我個人認為這個外掛非常有用,因為我們經常有很多日誌,能直接跳轉到記錄錯誤的那行是非常節省時間的。

一定要下載GitHub上的原始碼,用Swift語言處理私有API是很有趣的。KVC(鍵值編碼機制)可使它更簡單地檢索值,而不用引入Objective-C繫結。

如果你正在用cmd+shift+f,那你可能做錯了什麼。

相關文章