Cycript简介与使用

Cycript是Objective-C++、ES6、Java等语法的混合物,可以用来探索、修改和调试正在运行的Mac/iOS APP。通过Cydia安装Cycript和adv-cmds(用于进程相关命令),即可在iPhone上调试运行中的APP。

Cycript的开启和关闭

1、使用“ps -A”命令查看iPhone进程,找到要调试的APP的进程id或进程名称,也可以使用“ps -A | grep关键词”命令快速定位想调试的APP进程id或进程名称。

2、使用“cycript -p 进程id”或“cycript -p 进程名称”命令进入Cycript,建议使用“cycript -p 进程名称”命令,因为进程id可能会改变。

3、使用“control+D”退出Cycript。

Cycript常用语法

1、UIApp:等价于[UIApplication sharedApplication]。

2、定义变量:var 变量名 = 变量值,如var app = [UIApplication sharedApplication]。

3、用内存地址获取对象:首先获取对象的内存地址,然后使用“#内存地址”的格式即可表示该对象。

使用内存地址获取对象

4、获取已加载的所有OC类:ObjectiveC.classes。

5、查看对象的所有成员变量:*对象,对象可通过“#内存地址”的方式表示。

6、递归打印view的所有子控件:view.recursiveDescription().toString()。

7、筛选出某种类型的对象:例如choose(UIViewController)可筛选出所有UIViewController及其子类的对象。

封装Cycript(.cy文件编写)

为了方便使用,我们可以将常用的Cycript代码封装在一个.cy文件中,写法如下:

(function(exports) {

})(exports);

exports参数名固定,用于向外提供接口。

(function(exports){

    XZQSum = function(a, b) {

        return a + b;

    }

    exports.minus = function(a, b) {

        return a - b;

    }

    XZQAppId = [NSBundle mainBundle].bundleIdentifier;

    XZQRootVc = function() {

        return UIApp.keyWindow.rootViewController;

    }

    XZQDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

})(exports);

以上代码为一个简单的封装例子,不写“exports.”的为全局函数或全局变量,使用时直接使用名称即可,写“exports.”的在使用时需要加前缀“文件名.”。

将.cy文件存放到iPhone的/usr/lib/cycript0.9目录下,重启App和Cycript后就可以在Cycript中引用.cy文件,并使用它提供的接口。假设.cy文件为test.cy,那么引用.cy文件:@import test。然后就可以使用它提供的接口了,例如上述我们写的test.cy中的函数和变量使用如下:XZQSum(1, 2),test.minus(3, 1),XZQAppId等。

这里推荐使用MJ大神封装的Cycript库:https://github.com/CoderMJLee/mjcript。

你可能感兴趣的:(Cycript简介与使用)