Cycript

Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。

Cycript安装

Ø 官网: http://www.cycript.org/
Ø 下载后使用Cycript这个可执行文件
Ø 为了方便,我们可以放在 /opt/cycript_0.9.594 (opt目录有可选的意思)
Ø 为了方便使用,可以在~/.bash_profile中配置环境变量(执行文件路径)。

Cycript常用命令

Ø 进入Cycript环境
Ø Cycript
Ø 附加进程
Ø Cycript –r ip:port
Ø 退出Cycript环境
Ø Ctrl + D
Ø Cycript调试命令
Ø UIWindow.keyWindow() 获取keyWindow
Ø UIApp 获取APPlication单例对象
Ø recursiveDescription() 循环打印子视图
Ø toString() 格式化打印(遇到\n换行)
Ø # 对象地址。拿到该对象,可用于调用方法
Ø * 对象地址。可以取出对象的成员变量
Ø Choose(类名) 查询当前进程中该类型的对象。

Cycript高级用法

Ø Cy文件
Ø Cycript是一门脚本语言,它可以加载封装好的.cy文件。
Ø 我们会将常见的Cycript常用功能封装到.cy文件中,便于调试。

//IIFE 匿名函数自制表达式
(function(exports){
 
 HKAPPPATH = [NSBundle mainBundle].bundlePath;
 
    HKROOTVC = function(){
        return  UIApp.keyWindow.rootViewController;
    }
    HKKEYWIND = function(){
        return  UIApp.keyWindow;
    }
    
    
    
    HKGetCurrentVCFromRootVc = function(rootVC){
        var currentVC;
        if([rootVC presentedViewController]){
            //视图被persent出来的
            rootVC = [rootVC presentedViewController];
        }
        
        if([rootVC isKindOfClass:[UITabBarController class]]){
            // 根视图如果是UITabBarController
            currentVC = HKGetCurrentVCFromRootVc(rootVC.selectedViewController);
        }else if([rootVC isKindOfClass:[UINavigationController class]]){
            //根视图如果是UINavigationController
            currentVC = HKGetCurrentVCFromRootVc(rootVC.visibleViewController);
        }else{
            //视为当前控制器
            currentVC = rootVC;
        }
        
        return currentVC;
    };
    
    
    HKCurrentVC = function(){
        return HKGetCurrentVCFromRootVc(HKROOTVC());
    };
    
})(exports);

Ø 非越狱中导入.cy文件
Ø 利用MonkeyDev工具导入.cy文件
Ø MonkeyDev本身集成了Cycript。我们只需要将.cy文件通过xcode导入Framworks目录即可。

你可能感兴趣的:(Cycript)