Cycript檔案的使用

馬萬旻發表於2018-06-20

基本用法

在使用cycript時,我們可以通過類似 UIApp.keyWindow.rootViewController 這樣的方式,獲取到物件進行除錯。 但是每次都寫這樣複雜的相同的命令,未免有些太麻煩了。對此,我們可以建立.cy檔案。.cy檔案可以將常用的cycript指令封裝在一個檔案中,在將其@import依附在程式後,可以直接在cycript環境下呼叫已經封裝了的指令,方便使用。其存放目錄在: /usr/lib/cycript0.9/ 目錄下。

首先,嘗試封裝 UIApp.keyWindow.rootViewController。建立一個test.cy,檔案中寫入如下程式碼:

mm_rootVc = UIApp.keyWindow.rootViewController
複製程式碼

將test.cy檔案放到越獄手機的$/usr/lib/cycript0.9這個目錄下

在cycript中使用如下:

1. 首先,引入檔案 
$ @import test
2. 在cycript中,直接使用
$ mm_rootVc
複製程式碼

這種方式,是通過cycript語法, 將UIApp.keyWindow.rootViewController的結果直接賦值給了變數mm_rootVc。這樣做比較簡單,但也存在弊端,比如我們在工程中切換window的時候,由於mm_rootVc已經賦值並儲存在記憶體中,所以並不會隨之切換,這是我們在繼續使用mm_rootVc就會出現問題。這種情況下,我們可以使用函式:

在test.cy檔案中寫入如下程式碼:

mm_rootVcFunc = function() {
	return UIApp.keyWindow.rootViewController;
}
複製程式碼

在cycript中使用如下:

1. 首先,引入檔案 
$ @import test
2. 在cycript中,直接使用
$ mm_rootVcFunc()
複製程式碼

多級目錄引入

在使用cycript檔案的時候,我們將檔案放入到 /usr/lib/cycript0.9 這個目錄下,需要的時候通過 @import 引入.cy檔案。但是當我們通過功能或者其他條件封裝成多個.cy檔案的時候,一般會分成多級目錄,這樣條理更清晰。那麼在這種情況下,應該怎樣引入.cy檔案呢?

比如我們在 $/usr/lib/cycript0.9 目錄下,建立了一個mm資料夾,在mm資料夾下建立了一個test資料夾,text.py檔案在這個目錄下。引入text.py檔案的方式如下:

@import mm.test.test    //第一個test是檔案目錄,第二個test是檔名稱。
複製程式碼

附加cy檔案

按之前的做法,我們已經可以實現在cycript環境下使用自己封裝的.cy檔案。我們還可以通過附加的方式,直接將檔案附加。

命令如下:

cycript -p WeChat /usr/lib/cycript0.9/test.cy; cycript -p WeChat
複製程式碼

之前不通過附加的方式,我們每次修改.cy檔案並覆蓋到$/usr/lib/cycript0.9/ 的時候,都需要斷開cycript連線,結束程式,然後重新開啟程式,連線cycript。之後才可以使用修改後的.cy檔案。但是通過附加的方式,就可以在不結束程式的情況下,直接將修改過後的.cy檔案附加並使用。

相關文章