一、Cycript 簡介
- 1.1、Cycript 是Objective-C++柿汛、ES6(JavaScript)初澎、Java等語法的混合物,可以用來探索嫌松、修改、調(diào)試正在運行的
Mac
/iOS APP
官網(wǎng)
文檔
通過Cydia安裝Cycript,即可在iPhone上調(diào)試運行中的APP - 1.2贿讹、Cycript的開啟和關(guān)閉
-
開啟(進程的查看需要借助 PS指令,請看1.3)
cycript cycript -p 進程ID cycript -p 進程名稱
- 愛奇藝的進程是 2613够掠,那么輸入:cycript -p 2613民褂,之后的操作都是在調(diào)試愛奇藝
- 建議使用進程名稱(如愛奇藝:
cycript -p iQiYiPhoneVideo
),因為進程的ID一直在變
取消輸入:
Ctrl + C
退出:
Ctrl + D
取消輸入:
Command + R
-
- 1.3疯潭、ps 命令
- 安裝 adv-cmds
-
ps命令是
process status
的縮寫赊堪,使用ps命令可以列出系統(tǒng)當(dāng)前的進程-
列出所有的進程
ps –A ps aux
提示:輸入上面的指令是在 終端連接iphone的情況下
上圖左邊是進程 ID
,右邊是進程的可執(zhí)行文件
袁勺,右邊最后一個單詞可以稱為進程的名稱
雹食,如上圖的:launch、amfid期丰、syslogd....... -
搜索關(guān)鍵詞群叶,如果是愛奇藝,可以搜索 Video
ps –A | grep 關(guān)鍵詞
-
二钝荡、Cycript常用語法
-
2.1街立、常用語法一
-
(1)、獲取UIApplication 對象埠通,下面等價
UIApp [UIApplication sharedApplication]
- 說明愛奇藝的UIApplication 就是 UIApplication赎离,沒有改名字
-
(2)、定義變量:
var 變量名 = 變量值
// 獲取 app的Window var appWindow = UIApp.keyWindow // 獲取根控制器 app.rootViewController
以愛奇藝為例打印的是:<RootViewController: 0x12e075600>"端辱,說明愛奇藝的根控制器就是:RootViewController
-
(3)梁剔、用內(nèi)存地址獲取對象:
#內(nèi)存地址
-
(4)、ObjectiveC.classes:已加載的所有OC類,如下查看
糗事百科
的主界面 -
(5)舞蔽、查看對象的所有成員變量:*對象,如查看 UIApplication 里面的所有成員變量荣病,可以如下
*UIApp
-
-
2.2、常用語法二
-
(1)渗柿、遞歸打印view的所有子控件(跟LLDB一樣的函數(shù))
view.recursiveDescription().toString()
-
(2)个盆、篩選出某種類型的對象
choose(UIViewController) choose(UITableViewCell)
-
-
2.3、上面的使用太繁瑣了,我們可以使用 MJ 老師的工具: mjcript颊亮,它是基于Cycript實現(xiàn)的一些實用函數(shù)
- 安裝
-
2.4、mjcript 工具的用法
- 一些常用屬性
- 拿到顯示在最前面的控制器件舵,下面以糗事百科為例
- 我們可以看到 糗事百科 我的界面的控制器叫做:
QBMeViewController
-
獲得某個類的 對象方法名列表卸察,支持正則表達式查詢
MJInstanceMethodNames(控制器的名字 或者 #地址) // 舉個正則的例子,找有關(guān)login的對象方法 MJInstanceMethodNames(控制器的名字 或者 #地址,/login/)
- 我這里是以糗事百科的設(shè)置界面為例
-
獲得某個類的 類方法名列表铅祸,支持正則表達式查詢
MJClassMethodNames(控制器的名字 或者 #地址)
-
獲取界面的 view坑质,下面以糗事百科的登錄界面為例
MJSubviews(#地址.view)
接著我們可以在登錄界面的文本框上動手腳,比如修改
用:#內(nèi)存地址.text = "190"
來修改手機號的輸入#0x1443a7e00.text = "190"
我們還可以找到登錄按鈕 临梗,把它移除掉涡扼,如下
拿到登錄的按鈕地址,做如下操作
[#0x1443b9f60 removeFromSuperview]
-
這里做一個小提示:漢子與unicode碼轉(zhuǎn)換的方式,下面是用Python
python unicode('登錄','UTF-8') u'\u767b\u5f55'
-
三盟庞、封裝Cycript - .cy文件
-
3.1吃沪、
.cy文件
的簡單寫法,我的文件名是:jkcycript
(function(exports) { // 這里面可以填充我們需要的東西 })(exports);
函數(shù) 和 常量的定義
(function(exports) { // 求和 sum = function(a,b) { return a + b }; // 求差 minus = function(a,b) { return a - b }; })(exports); // 在使用的時候我們需要如下操作 // 導(dǎo)入: @import jkcycript @import jkcycript sum(2,3) // 結(jié)果是:5
上面是全局的什猖,如果想要前綴可以寫為
(function(exports) { // 求和 exports.sum = function(a,b) { return a + b }; // 求差 exports.minus = function(a,b) { return a - b }; })(exports); // 在使用的時候我們需要如下操作 // 導(dǎo)入: @import jkcycript @import jkcycript jkcycript.sum(2,3) // 結(jié)果是:5
- exports 參數(shù)名固定票彪,用于向外提供接口
- 將
.cy
文件存放到/usr/lib/cycript0.9
目錄下
3.2、更多的可以參考MJ老師的mjcript
四不狮、Reveal (UIView層級分級工具)
-
4.1降铸、Reveal是一款調(diào)試iOS程序UI界面的神器
官網(wǎng):https://revealapp.com
下載:https://revealapp.com/download/
破解版:提取碼: y8ri
建議下載至少Reveal4版本,支持USB連接調(diào)試摇零,速度快推掸。低版本的只能WiFi連接調(diào)試提示 :Reveal 只能識別 UIView 的層級結(jié)構(gòu),想要是識別控制器的結(jié)構(gòu)驻仅,我們可以使用 mjcript
- 如果是我們自己的app谅畅,我們可以在 xcode上查看,也可以用 Reveal,參考博客 iOS更新系統(tǒng)10.13.4關(guān)于Reveal4的破解版和最新配(親測可用)置
-
4.2噪服、Reveal 調(diào)試環(huán)境配置 (越獄設(shè)備)
-
調(diào)試環(huán)境配置 一 :iPhone上安裝Reveal Loader
軟件源:http://apt.so/codermjlee铃彰,不要安裝其他源的版本,有可能不支持新版Reveal
-
調(diào)試環(huán)境配置 二
安裝完Reveal Loader后芯咧,打開【設(shè)置】,選擇需要調(diào)試的APP -
調(diào)試環(huán)境配置 三
找到Mac的Reveal中的RevealServer
文件,覆蓋iPhone的/Library/RHRevealLoader/RevealServer
文件,我們可以用iFunBox
打開
- 重啟SpringBoard或者重啟手機敬飒,可以在iPhone上輸入終端命令
重啟SpringBoard:killall SpringBoard
重啟手機:reboot
- 重啟SpringBoard或者重啟手機敬飒,可以在iPhone上輸入終端命令
-
-
4.3邪铲、在上面的操作做完,我們再重新打開 Reveal 无拗,就可以看到使用中的iphone