前言说明:
前段时间看新浪微博的一些文章,有位叶大神提到 JSPatch 的作者和一些关于 JSPatch 的文章,遂去了解了一下.
1.可以干什么(了解 JSPatch)
苹果开发者,要想你编写的应用让更多的人下载使用,你就必须让你的应用上传到苹果应用商店.一旦苹果商店里面的应用出现bug,你就要解决 bug, 然后从新更新版本. 如果从新更新的话苹果审核快则一个星期,慢则半个月,在此期间用户对 App 的体验就会很差,一旦是重大的 bug, 更需要即时更改.虽然今年六月份之后 App 上线的速度快了很多,大概两天左右,但是遇到比如崩溃等问题,也是需要越即时修复线上 bug.
JSPatch利用javascript调用苹果原生的接口,替换任意的 Objective-C,修复线上 bug.
2.准备工作
1.在 JSPatch 平台注册,新添加 App,生成 AppKey, 和很多第三方平台注册一样.
2.在该平台下载 SDK,集成到项目里面
3.导入JavaScriptCore.framework框架,这个框架是JavaScript 调用 OC 原声接口用的
3.使用 JSPatch
1.导入头文件
#import <JSPatch/JSPatch.h>
2.在application:didFinishLaunchingWithOptions:方法里面测试一下怎么用 JSPatch
[JSPatch testScriptInBundle];
注意:实时性不高的 App 在application:didFinishLaunchingWithOptions:方法里面调用一次就行了,实时性高的 App 在applicationDidBecomeActive:里面调用
4.测试
1.项目测试
![](https://img.haomeiwen.com/i1072067/d1b7578c586520a8.png)
每组多少个,默认返回一组
![](https://img.haomeiwen.com/i1072067/93c7acfd628b8308.png)
cell 的复用
![](https://img.haomeiwen.com/i1072067/dcd4dd6b4b5f37f0.png)
跑完程序一定崩溃
2.新建 main.js 文件
![](https://img.haomeiwen.com/i1072067/18b8796af9efc046.png)
直接把 File 文件改成 main.js
![](https://img.haomeiwen.com/i1072067/80d5c8684e2c8749.png)
![](https://img.haomeiwen.com/i1072067/906d73ba25cb3cb5.png)
3.然后在main.js里面用 javascript代理直接调用苹果的原生代码进行更改
defineClass("ViewController", {
tableView_cellForRowAtIndexPath:function(tableView, indexPath) {
varcell = tableView.dequeueReusableCellWithIdentifier("cell")
if(!cell) {
cell = require('UITableViewCell').alloc().initWithStyle_reuseIdentifier(0,"cell")
}
cell.textLabel().setText("1")
returncell
},
}
)
这里对项目里面 ViewController类里面的tableView_cellForRowAtIndexPath:这个方法进行了从新编写,用的是javascript,这样你在跑一下就不会崩溃了,因为从新编写了tableView_cellForRowAtIndexPath:这个方法里面的代码,然后这一句cell.textLabel().setText("1")就相当于self.textlable.text = @"1";
所以得到了实现了javascript更改 OC 源代码
还有一些关于线上版本的管理,灰度和条件发布,自定义RSA密钥必要和安全问题没有介绍以后补上,还有这个 JSPatch 调用次数超过一定量的时候,会收取一定的费用,具体收多少, JSPatch 有介绍
网友评论