JSPatch 可以让你用 JavaScript 书写原生 iOS APP
2015-10-12 14:17
337 查看
简介
JSPatch 可以让你用 JavaScript 书写原生 iOS APP。只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码实时修复 bug。 JSPatch 在 Github 开源 4 个月已经有2K+ star,公司内已应用在微信/微信读书/腾讯地图上,公司外许多知名产品像美团/蚂蜂窝/去哪儿/蘑菇街/同程等都已接入上线。 Github 项目主页:https://github.com/bang590/JSPatch
功能清单
JSPatch 相对于另一个 hotfix 框架 waxPatch,有以下优势:小巧:只有 1300 行 OC 代码与 170 行 JS 代码
JS语言:终端应用最广泛的脚本语言,无需另外学习
完善的功能支持:线程安全,支持64位,支持Block,支持任意类型参数的传递转换
完善的单元测试:每一个功能点都有单元测试保证健壮性
断点调试脚本:通过接入 Safari 控制台可以断点调试 JS 脚本
完善的文档:大量文档资料可供参考
开源社区支持:大量知名 APP 使用,Github关注度高,至今已有10位社区成员贡献代码
符合苹果审核规则:苹果不允许下发可执行代码,但通过 JavaScriptCore.framework 执行的JS代码除外,详见这里
快速上手
例如线上 APP 有一段代码出现 bug 导致大量 crash:@implementation JPTableViewController
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *content = self.dataSource[[indexPath row]]; //可能会超出数组范围导致crash
JPViewController *ctrl = [[JPViewController alloc] initWithContent:content];
[self.navigationController pushViewController:ctrl];
}
...
@end
可以通过下发这样一段 JS 代码,覆盖掉原方法,修复这个 bug:
//JS
defineClass("JPTableViewController", {
//instance method definitions
tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
var row = indexPath.row()
if (self.dataSource().length > row) { //加上判断越界的逻辑
var content = self.dataArr()[row];
var ctrl = JPViewController.alloc().initWithContent(content);
self.navigationController().pushViewController(ctrl);
}
}
}, {})
详细
FAQ常见问题
详见Github wiki:https://github.com/bang590/JSPatch/wiki源码概况
源码路径: http://tc-svn.tencent.com/components/JSPatch_proj 该组件已有 1 次源码更新操作。最近提交:
bangchen 在 JSPatch 组件中提交了89个源码变更,版本号: 2 。
提交备注:init
2015-09-14 19:42:19
现在去看看
Checkout源码
http://pub.code.oa.com/project/home?comeFrom=task_cc_weekly_personal_20151012&projectName=JSPatch&ticket=15D7EB787388C77B72FE3437987F068C36B68AFA86BBC3C726BFD6A65EFC77FA907EC23EE985ABD6A2E957FD38BA388
相关文章推荐
- iOS 解析JSON
- Swift 元组
- Android中的数据库——SQLite
- 解读Unity中的CG编写Shader系列2——shader的输入输出参数
- iOS 9适配技巧(更新版)
- [Android Studio 权威教程]打包、生成jks密钥、签名Apk、多渠道打包
- 解读Unity中的CG编写Shader系列1——初识CG
- Unity MVC:如何提升游戏开发质量
- android开发中关于PendingIntent的知识点
- Web App Libraries下没有jar包的问题
- Android 中的BroadCastReceiver
- android软键盘的显示和隐藏
- 设置模式之单例模式(附上一个Objective-C编写的播放音乐的单例类)
- [IOS 开发] OC 定义一个方法,参数数量可变.
- IOS9之后适配需要注意的问题
- iOS9适配系列教程
- iOS开发——视频播放
- app timeline server
- unity EasyTouch虚拟摇杆的使用(边界情况处理)
- getContext() , getApplicationContext() , getBaseContext() and “this”的区别