Cycript是由Cydia創(chuàng)始人Saurik推出的一款腳本語言悦冀,Cycript混合了OC、JavaScript語法的解釋器睛琳,這意味著我們能夠在一個命令中使用OC或者JavaScript盒蟆,甚至兩者并用。它能夠掛鉤正在運行的進程掸掏,能夠在運行時修改很多東西茁影。
Cycript安裝
下載后使用Cycript可執(zhí)行文件。下載地址
為了方便丧凤,我們可以放在 /opt/cycript_0.9.594 (opt目錄有可選的意思)
為了方便使用,可以在~/.bash_profile中配置環(huán)境變量(執(zhí)行文件路徑)步脓。
安裝后執(zhí)行報錯:
可以使用這個(解決方案)[https://www.cnblogs.com/WinJayQ/p/8886978.html]進行處理愿待。
Cycript使用
Cycript需要附加到應(yīng)用進程,才可以調(diào)試應(yīng)用(Cycript –r ip:port)浩螺。
退出Cycript環(huán)境,Ctrl + D
我們使用MonkeyDev創(chuàng)建應(yīng)用,MonkeyDev會在應(yīng)用中注入cycript.framework,并且為當(dāng)前應(yīng)用打開一個端口(6666),作為server仍侥。
Mac端的cycript作為client去鏈接server,連接:cycript -r 192.168.0.109:6666
為了讓每次登錄更方便一些,可以將cycript -r 192.168.0.109:6666寫成腳本cyLogin.sh,并配置環(huán)境變量,就可以直接. cyLogin連接要出。
一.Cycript常用調(diào)試命令:
1.UIWindow.keyWindow() 獲取keyWindow
2.UIApp 獲取APPlication單例對象
3.recursiveDescription() 循環(huán)打印子視圖
4.toString() 格式化打印(遇到\n換行)
5.# 對象地址农渊。拿到該對象患蹂,可用于調(diào)用方法
6.* 對象地址≡椅桑可以取出對象的成員變量
7.Choose(類名) 查詢當(dāng)前進程中該類型的對象传于。
二.Cycript高級語法
pviews()
pvc()
pactions(#0xxxxxxxxx)
rp(#0xxxxxxxxx)
appid 當(dāng)前bundleid
三.自定義
Cycript是一門腳本語言,它可以加載封裝好的.cy文件醉顽。
我們會將常見的Cycript常用功能封裝到.cy文件中沼溜,便于調(diào)試。
我們之所以能使用高級語法,是因為使用MonkeyDev創(chuàng)建工程,MonkeyDev導(dǎo)入了一些高級語法.
因此,我們也可以自定義語法游添。
1.新建文件jensen.cy,Type改為JavaScript Source
2.封裝代碼
//IIFE 匿名函數(shù)自治縣表達式
(function(exports) {
JNROOTVC = function(){
return UIApp.keyWindow.rootViewController;
}
JNKEYWIND = function(){
return UIApp.keyWindow;
}
JNGetCurrentVCFromRootVc = function(rootVC){
var currentVC;
if([rootVC presentedViewController]){
//視圖被persent出來的
rootVC = [rootVC presentedViewController];
}
if([rootVC isKindOfClass:[UITabBarController class]]){
// 根視圖如果是UITabBarController
currentVC = JNGetCurrentVCFromRootVc(rootVC.selectedViewController);
}else if([rootVC isKindOfClass:[UINavigationController class]]){
//根視圖如果是UINavigationController
currentVC = JNGetCurrentVCFromRootVc(rootVC.visibleViewController);
}else{
//視為當(dāng)前控制器
currentVC = rootVC;
}
return currentVC;
};
JNCurrentVC = function(){
return JNGetCurrentVCFromRootVc(JNROOTVC());
};
})(exports);
3.在Build Phases-->Copy Files引入jensen.cy
4.cycript測試使用