xcode8起,xcode不在支援外掛程式,alcatraz不能再使用了。蘋果提供了xcodekit原始碼編輯器拓展,使用它開發出xcode拓展來代替以前的外掛程式。
環境新建工程macos 10.12
xcode 8.2.1
新建乙個"xcode source editor extension"的target,命名為mycommentext
注意:如果彈出詢問是否啟用scheme提示,選擇啟用
編輯scheme
之後執行這個拓展target就會出現灰色xcode,這個就是可用測試我們工具的執行例項。
修改命令
mycommentext中info.plist修改xcsourceeditorcommandidentifier, xcsourceeditorcommandname內容。這個是命名選單裡有我們的命令。
執行檢視前,需要新增證書。signing裡使用自動管理證書。mycomment,mycommentext都需要新增。
點執行後,隨便選乙個工程開啟,開乙個原始檔檢視
新增**實現我們的功能
在我們建立的工程裡有兩個swift檔案,sourceeditorextension.swift, sourceeditorcommand.swift。前者可以用來自定義命令,而命令在後者裡實現。通過繼承xcsourceeditorcommand,xcode在呼叫這個命令時將會執行perform方法。我們可以在perform裡實現我們要的功能。下面引用了xcodeccomment的**。(稍微修改了一下它的小問題。)
// sourceeditorcommand.swift
import foundation
import xcodekit
enum commentstatus
class sourceeditorcommand: nsobject, xcsourceeditorcommand
}} else }}
completionhandler(nil)
}func handle(range: xcsourcetextrange, inbuffer buffer: xcsourcetextbuffer) -> bool
return false
}func text(inrange textrange: xcsourcetextrange, inbuffer buffer: xcsourcetextbuffer) -> string
var text = ""
for aline in textrange.start.line...textrange.end.line
}return text
}func position(_ i: xcsourcetextposition, offsetby: int, inbuffer buffer: xcsourcetextbuffer) -> xcsourcetextposition else
aline += 1
alinecolumn = 0
} while aline < buffer.lines.count
return i
}func replace(position: xcsourcetextposition, length: int, with newelements: string, inbuffer buffer: xcsourcetextbuffer)
linetext.replacesubrange(start..= linetext.endindex
linetext.insert(contentsof: newelements.characters, at: start)
linetext.remove(at: linetext.index(before: linetext.endindex)) //remove end "\n"
buffer.lines[position.line] = linetext
}}extension string catch
return nil
}var isunpaircommented: bool }}
return false
}var commentstatus: commentstatus
if isunpaircommented
return .plain}}
perform中invocation.buffer可以獲取到我們執行命令時的緩衝文字資訊,包括選中的文字內容,每行內容等。buffer.sections是所選文字內容陣列,由xcsourcetextrange組成,它標示文字的位置區間,可以找到所選文字的起始位置。buffer.lines是緩衝文字的每行對應的內容,通過對它進行操作起到操作文字的作用。
再次執行**可以看到我們的命令生效了
安裝拓展
找到products在finder,將之拷貝到應用程式資料夾內,再重啟xcode就可以看到生效了。
遺留乙個問題
從我執行過這個程式後,xcode自身帶有的注釋功能就不可用了。但是如果我除錯run了本工程時,卻又可以用。停止除錯後又不能用了。應該是xcode的bug吧,暫時沒有找到方法解決。知道解決的告訴我一下,謝謝。
查考資料
更多拓展
xcode-extensions
Xcode8 模擬器截圖崩潰問題解決
從xcode7公升級到xcode8有一段時間了,也聽到一些小夥伴說使用xcode8時遇到的一些坑,比如 自動提示的外掛程式無法使用,模擬器截圖閃退的問題。這次說一下如何解決模擬器無法截圖的問題。看到這個一定有人有話要講,那我可以用snip mac os 自帶的系統快捷鍵 command shift ...
《Xcode實戰開發》 2 6節編輯器區域
2.6 編輯器區域 xcode實戰開發 編輯器區域 見圖2.16 動態地在適合於當前選擇的檔案 通過專案導航器或者跳轉欄選擇 的編輯器之間跳轉。這意味著,對於源 檔案,開發人員將會看到源 編輯器 source editor 對於介面構建器檔案,開發人員將看到介面編輯器 inte ce editor ...
Lesson8 vim 編輯器的使用
本文僅介紹部分常用操作,完整操作可參考 1.游標移動 ctrl f ctrl b page down page up 移動到改行最前面的字元 最後面的字元 gg g 移動到檔案第一行 最後一行 ngg ng 移動到第 n 行 2.查詢 word word 從前向後 從後向前查詢word 3.替換 格...