• JSPatch 可以让你用 JavaScript 书写原生 iOS APP


    简介

     
    JSPatch 可以让你用 JavaScript 书写原生 iOS APP。只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码实时修复 bug。
    
    JSPatch 在 Github 开源 4 个月已经有2K+ star,公司内已应用在微信/微信读书/腾讯地图上,公司外许多知名产品像美团/蚂蜂窝/去哪儿/蘑菇街/同程等都已接入上线。
    
    Github 项目主页:https://github.com/bang590/JSPatch

    功能清单

    JSPatch 相对于另一个 hotfix 框架 waxPatch,有以下优势:

    1. 小巧:只有 1300 行 OC 代码与 170 行 JS 代码
    2. JS语言:终端应用最广泛的脚本语言,无需另外学习
    3. 完善的功能支持:线程安全,支持64位,支持Block,支持任意类型参数的传递转换
    4. 完善的单元测试:每一个功能点都有单元测试保证健壮性
    5. 断点调试脚本:通过接入 Safari 控制台可以断点调试 JS 脚本
    6. 完善的文档:大量文档资料可供参考
    7. 开源社区支持:大量知名 APP 使用,Github关注度高,至今已有10位社区成员贡献代码
    8. 符合苹果审核规则:苹果不允许下发可执行代码,但通过 JavaScriptCore.framework 执行的JS代码除外,详见这里

    快速上手

    例如线上 APP 有一段代码出现 bug 导致大量 crash:

    1. @implementation JPTableViewController
    2. ...
    3. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    4. {
    5.   NSString *content = self.dataSource[[indexPath row]];  //可能会超出数组范围导致crash
    6.   JPViewController *ctrl = [[JPViewController alloc] initWithContent:content];
    7.   [self.navigationController pushViewController:ctrl];
    8. }
    9. ...
    10. @end

    可以通过下发这样一段 JS 代码,覆盖掉原方法,修复这个 bug:

    1. //JS
    2. defineClass("JPTableViewController", {
    3.   //instance method definitions
    4.   tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
    5.     var row = indexPath.row()
    6.     if (self.dataSource().length > row) {  //加上判断越界的逻辑
    7.       var content = self.dataArr()[row];
    8.       var ctrl = JPViewController.alloc().initWithContent(content);
    9.       self.navigationController().pushViewController(ctrl);
    10.     }
    11.   }
    12. }, {})

    FAQ常见问题

    源码概况

    源码路径: http://tc-svn.tencent.com/components/JSPatch_proj
    该组件已有 1 次源码更新操作。
    最近提交:
    bangchen 在 JSPatch 组件中提交了89个源码变更,版本号: 2 。
    提交备注:init
    2015-09-14 19:42:19
     
     
     
    http://pub.code.oa.com/project/home?comeFrom=task_cc_weekly_personal_20151012&projectName=JSPatch&ticket=15D7EB787388C77B72FE3437987F068C36B68AFA86BBC3C726BFD6A65EFC77FA907EC23EE985ABD6A2E957FD38BA388
     
  • 相关阅读:
    灵活的JavaScript(一)
    菜鸟快飞之JavaScript对象、原型、继承(三)
    菜鸟快飞之JavaScript对象、原型、继承(二)
    菜鸟快飞之JavaScript对象、原型、继承(一)
    undo清理 &redo 持久化
    mysql执行计划分析
    mysql5.6的统计信息
    pt-online-schema-change原理分析
    校验主从数据并修复
    使用伪master+binlog恢复数据
  • 原文地址:https://www.cnblogs.com/max5945/p/4871527.html
Copyright © 2020-2023  润新知