最近被苹果审核整怕了,每次提交版本都得等待一周到两周的审核时间,我是受不了这种速度了,于是决定研究有没有其他的方法跳过提交版本这个步骤,同样能够修复bug呢,于是我找到了JSPatch,也许也有很多人觉得这是个很高大上的技术,其实不然,我们只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。当然呢,目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。

JSPatch的代码大家可以去github 上面下载

首先说一下JsPatch实现的内部原理:JsPatch能做到通过JS调用和改写OC方法最根本的原因是 Objective-C 是动态语言,OC上所有方法的调用/类的生成都通过 Objective-C Runtime 在运行时进行,我们可以通过类名和方法名反射得到相应的类和方法,也可以替换某个类的方法为新的实现,还可以新注册一个类,为类添加方法。这里就不详细介绍runtime了,相关的资料我会在后续的博客里介绍,大家再等等吧。所以 JSPatch 的原理就是:JS传递字符串给OC,OC通过 Runtime 接口调用和替换OC方法。这个很容易理解,JS的作用只是一个信使的作用,具体实现还是得靠我们OC,所以说OC还是世界上最美的语言,哈哈。

同时在这里给大家一个比较好的网站  点这里.这是一个OC转JS的一个工具网站。

下面给大家演示一下具体实现的步骤

- (void)viewDidLoad
{UITableView* tv = [[UITableView alloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];self.mqTableView = tv;self.mqTableView.delegate = self;self.mqTableView.dataSource = self;[self.view addSubview:self.mqTableView];}
#pragma mark -- UITableViewDataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return 3;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString* i=  @"cell";UITableViewCell* cell = [tableView  dequeueReusableCellWithIdentifier:i];if (cell == nil ) {cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:i];}cell.textLabel.text = @"meiqing";cell.backgroundColor = [UIColor whiteColor];return cell;
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{self.dataSource = @[@"1",@"2"];// 肯定会超出数组范围导致 crashNSString *content = self.dataSource[indexPath.row];}

显示的结果是这样的

屏幕快照 2015-12-10 上午12.09.15.png

上面的图片是没有修改时候的显示,当我点击第三行一定会闪退,怎么修复呢?这个时候就不用发版本了,服务器可以给我们传送一个js文件,文件里的内容是这样的

屏幕快照 2015-12-10 上午12.44.14.png

同时,我们在APPDelegate里调用这个JS就可以了,如下:

屏幕快照 2015-12-10 上午12.45.25.png

再次运行就不会出现闪退了。
整个流程下来其实挺简单的,希望大家能够接受,如果喜欢我的文章,可以关注我后续的文章。

附带github demo

如何实现iOS热更新相关推荐

  1. iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET

    iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET Weex

  2. iOS热更新解读(三)—— JSPatch 之于 Swift

    继承自 NSObject 的 Swift 类 修改属性 新建 Swift 工程 SwiftJSPatch. AppDelegate.swift: // in AppDelegate.swift --- ...

  3. iOS热更新实现方式

    转发 链接:https://www.jianshu.com/p/00111d447e7e 苹果静止热更新,可惜我的是企业app,没有这些约束了,随便用.(当然有些热更新已经可以通过苹果审核了,比如JS ...

  4. 沉浸式iOS热更新方案

    沉浸式iOS热更新方案 iOS动态热更技术使得用户无需重新下载APP,就能修复线上BUG,提高用户体验,为APP快速迭代开发提供良好支持.此前业界的热更方案,多数是利用脚本语言修改Objective- ...

  5. Unity应用的iOS热更新

    Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ? 什么是热更新 ? 为何要热更新 ? 如何在iOS 上对Unity 应用进行热更新 ? 支持 ...

  6. IOS热更新-JSPatch实现原理+Patch现场恢复

    关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...

  7. iOS 热更新,实时代码更新,动态更新,动态库framework

    允许转载! demo 下载 只要审核通过后,无须再次审核,就可以动态更新,iOS有三种处理方案: 一.开源框架 reactive native,但是编程语言是js 二.lua 脚本 三.使用oc语言的 ...

  8. Ios热更新,实时代码更新,动态更新,动态库framework

    动态更新,iOS有三种处理方案 1,开源框架reactive native,但是编程语言是js iOS app可以在运行时从服务器拉去最新的js文件到本读,然后执行,因为js是一门动态的脚本语言 所以 ...

  9. iOS热更新方案(过AppStore审核)

    一.查阅了几种热更新的方案, JSPatch . Aspects . Stringer . TTPatch .Mango.OCRunner.下面用一个表格对这几种方案分别做个对比:        方案 ...

  10. iOS 热更新/热修复

    热更新/热修复(调研的可能不全) 热更新 1.* Flutter * 由于渲染的基础(gdi)是自己实现的,所以实现跨平台.性能优化.摆脱平台约束方面的裕度更大.从实际体验来看, Flutter 的性 ...

最新文章

  1. 让VBCommenter支持自定义用户名
  2. Zookeeper分布式一致性原理(四):Zookeeper简介
  3. 零起点学算法82——数组中查找数
  4. [JavaWeb-HTTP]HTTP概念
  5. android 怎么获取app 字体颜色,android app 修改字体
  6. 动手学深度学习(PyTorch实现)(五)--多层感知机
  7. vmware 里MAC 鼠标能移动 无法单击
  8. 淘宝搜索算法综述之一:淘宝搜索的特点
  9. vue单页面SEO优化
  10. 群表示论之Able群的不可约表示
  11. 设计模式-业务代表模式-个人思考
  12. Chinese New Year
  13. mini2440 led驱动程序测试实验
  14. html中input标签中type属性小总(包含html5新增表单属性)
  15. “远程办公”用户达3.46亿,一年每人可节省1.4万
  16. python函数计算乘积教材课后题_Python3函数习题解析
  17. UE4C++学习篇(六)--- 碰撞组件的Overlap处理
  18. 【python】python每天抓取一篇英语美文,发送到邮箱
  19. 华硕 i3-8100-H310-Hackintosh黑苹果EFI引导文件
  20. UVA 1533 - Moving Pegs 状态压缩 + bfs

热门文章

  1. jython_Jython简介,第2部分:编程要点
  2. 如何把安卓系统刷成linux,废旧Android手机如何改造成Linux服务器?
  3. c++内存管理3: new handler、=default、=delete函数
  4. GPIO的8种工作模式——基于STM32F767IGT6
  5. MacOS 查看硬盘分区参数
  6. swapidc,QCNSWAP,模板
  7. Autodesk 3ds Max 2012 安装破解图文教程
  8. 监理考试用计算机,监理工程师考试用什么计算器
  9. 北京医院科室强项实力排行榜
  10. QT编程从入门到精通之十一:“第三章:Qt Creator”之“3.5 构建与运行程序”