近幾周在用 swift 做一個命令行工具 smck 用來對現有 OC 工程的代碼做些分析和處理。日后工程切換成 Swift 可以加上對 Swift 工程代碼的支持。昨天看到喵神在微博上說他下周要直播 live coding 一個 swift 的命令行工具,傳送門: 現場編程 - 用 Swift 創建命令行工具 fengniao-cli Part1 ,其實蠻期待。想想跟喵神挺有緣的,近下了他開發的 iOS 應用 Mail Me,隨時能夠記錄工作和準備講座時一些靈感,smck 的一些實現還有模塊的設計靈感也是通過這個應用隨時記錄了下來呢,所以也推薦大家使用,真心方便。還有先前 Segmentfault 邀請我這個月31號在他們的直播平臺上做個講座,傳送門: 深入剖析 iOS 編譯 Clang / LLVM - 戴銘 - SegmentFault 講堂 ,先前寫過一篇文章,直播可能更利于演示和詳細說明一些細節吧。看來這段時間我要跟喵神做好多類似的事情了。smck 的代碼今天已經放到了 Github 上,地址:https://github.com/ming1016/smck
因為代碼分析的過程會通過一系列已經編寫好的 parser 來完成,parser 會完成 token 的分析和上下文還有工程全局分析輸出所有節點的數據信息,根據這些完整的信息和已經定義好的一系列具有完整包含關系的結構體就能夠進行各種各樣功能的定制化了。下面是一些 parser 和功能介紹:
生成的 File 結構體里面套裝各個子結構體,斷點如圖:
先填上對應的命令行參數和值,設置參數參考下圖。然后運行即可。
在 Xcode 里選擇 Product - Archive - Export 即可,如圖:
執行
./smck -o /User/your_project_path
輸出如下
由于工程檢查規則非常多樣化,所以需要編寫一些 Plugin,后面我會逐漸抽出一些具有共性的放上來,目前在 Plugin 目錄下我放了兩個例子,在例子里可以看出來怎么通過訂閱 Parser 輸出的不同節點的不同數據來進行不同的檢查。在控制臺管理相關的 Checker 類里關聯 Parser 和 Plugin 的代碼由于使用了 RxSwift 也變得非常簡潔明了,如下:
func doO(path:String) { guard path.characters.count > 0 else { return } UnUseObjectPlugin().plug(ob: ParsingEntire.parsing(path: path))
}
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。