先要把自己写的.cy文件复制到手机上的/usr/lib/cycript0.9/目录汇总

  • 用scp 指令把cy文件重新赋值到手机上的cycript0.9文件夹中
    例如下面用usb的20000端口登录的
 scp -P 20000 /Volumes/SN750\ 1T/越狱相关 代码/cycript文件类库TdwTool封装/TdwTool.cy  root@localhost:/usr/lib/cycript0.9/TdwTool.cy
  • 用iFunBox直接复制进去

包含这个cy文件

先要 让cycript 加载一个进程,然后再@import包含文件,如下先加载进程:testOc,然后包含TdwTool.cy文件

cycript -p testOc
@import TdwTool

cy文件的语法

下面我写了一个例子,文件名叫:TdwTool.cy
先不用看懂,先大概看一下,他的语法官方描述是类似js和 oc . 在我看来就是oc和其他高级语言,因为除了oc其他高级语言都差不多.

(function(exports){

    var i = 10;
    //file 这个file可以随便起名,在手机端调用的时候 ,例如这个TdwTool.cy,调用的时候就用:TdwTool代替file
    exports.version  = 1.0;  //在外面调用就写成TdwTool.version
    //这些在oc中编译通过的代码在cy文件中很多都嫩共
    TdwBundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    TdwBundleId = [NSBundle mainBundle].bundleIdentifier;
   
    TdwbundlePath = [NSBundle mainBundle].bundlePath;
	// 返回document文件目录 ,注意[0] 不能用oc语法.first代替,否则会cycript运行会报错
	TdwDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
	// 返回 path文件目录
	TdwCachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; 

    //函数的调用 
    TdwAdd = function(a,b){
        return a+b;
    }
    TdwSetI = function(a){
        i = a;//设置cy文件中的i,跟手机里新建的i是2个不同的变量
    }
    TdwGetI = function(){
        return i;
   }
    TdwAdd1 = function(){
        return i+1;
    }

 }
 )(exports);

要写的功能要放在下面的exports包含的中间

这个格式跟swfit的匿名闭包一样很像,参数是exports是固定的, 结尾自己调用了这个参数是exports的闭包.加载完文件就执行了

(function(exports){

//要写的功能
 }
 )(exports);

这个exports 有特殊作用,他在外面调用的时候是用 文件名. 来代替exports

例如上面代码

(function(exports){
 exports.version  = 1.0; 
//要写的功能
 }
 )(exports);

这个调用的时候就要用文件名TdwTool来代替exports

TdwTool.version

执行结果就是返回一个1.0
没有被exports.修饰的都是全局的,import完文件以后就可以直接调用

变量的定义

var 变量名
// 例如上面的:    var i = 10;

函数定义

function(参数列表...){
函数内容
}

下面定义完函数赋值给了TdwAdd

TdwAdd = function(a,b){
        return a+b;
}

调用的时候直接输入 左边的TdwAdd,因为把右边函数赋值给左边的函数名字TdwAdd了:

TdwAdd(3,4) 

执行结果是:7

用函数修改变量

修改变量是在函数体里面修改,直接在手机上利用变量名不能修改.例如函数TdwSetI:让变量 i= 函数传入的值a

TdwSetI = function(a){
        i = a;
}

注意如果不用这个函数TdwSetI
那么直接输入 i = 11,这个只是临时新建了一个i变量,跟cy文件里面的i不是一个东西,虽然能执行,但是i没有被存储到文件中的i里
看下面的运行结果,临时新建的i = 100, TdwTool.cy文件中的i被函数设置成50, 但是当我们在输入i的时候发现返回还是100,因为这个100是自己新建的.TdwTool中的i是另一个变量50,如下图运行结果

在这里插入图片描述

oc中大部分语法代码都能直接写在函数中,或者复制给变量

  • 下面这些等号右边都是普通的oc代码
  • 是直接赋值了固定值,只有在第一次执行的时候回被赋值到左边的变量里,如果要每次调用都重新复制,就要用函数function来把功能写进函数体里
  • [0]不能用.first代替,否则运行报错
  	TdwBundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    TdwBundleId = [NSBundle mainBundle].bundleIdentifier;
   
    TdwbundlePath = [NSBundle mainBundle].bundlePath;
	// 返回document文件目录 ,注意[0] 不能用oc语法.first代替,否则会cycript运行会报错
	TdwDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
	// 返回 path文件目录
	TdwCachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; 

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐