iOS 热更新,热修复可上架方案

5,162 阅读3分钟

TTPatch一款轻量热更新框架

原理

基于JavaScript+runtime实现动态调用/替换/新增方法/Class

背景

因为老东家58版本迭代块,需求多,导致很多需求开发质量以及测试质量不高. 线上经常会出现一些小bug很是头疼.所以有了搞一个热修复的轮子.

关于业界的成熟方案

下面列举一些个人了解,并不全面,请谅解.

  1. lua.
  2. JavaScript.
  3. Oc作为脚本,滴滴方案(为开源).

其实热更新在游戏开发领域已经很成熟了,无论那一种实现方案思路都是类似的.

1.1
如图1.1

Object-C Code转换成一种中间语言下发,然后本地执行中间语言通过Object-C的动态性实现达到动态调用的目的.

作为技术选型,因为在58以RN开发,所以对JavaScript所以选择JavaScript作为中间语言.

看到这里很多同学就会问啦,请问你跟JSPatch有什么区别?

其实原理都是JavaScript当做中间语言实现的,但是技术细节是不一样的. 有一些参考了JSPatch的思路.

为什么JSPatch不能过审,你的TTPatch就可以过审?

首先JSPatchgithub开源版本已经被下架,集成了开源版本的app基本也都难以通过上架. 但是收费版依然可以上架. 这就说明本身以JavaScript为中间语言的热更新手段并没有本堵死. 而且我了解到很多大厂也集成了热更新模块. 所以热更新不可行是因为JSPatch本身的原因. 具体可查看关于热更新被拒绝的审核条款.

关于上架

目前已经有多个APP集成TTPatch成功上架.

项目进度

支持热更新 / 热修复80%场景

为了防止发生JSPatch的悲剧, 建议加群了解上架问题

QQ群:978337686 本项目会持续维护

项目地址 github

您的star就是我开发的动力.


1. 使用文档

2. 基础用法

3. 在线工具

4. 常见问题

5. 进阶用法

关于上架

风险提示: 请配合服务器下发开关使用, 通过配置决定APP是否初始化TTPatch模块

审核问题请加群:978337686

1. 功能列表

功能特性 备注限制
支持手动设置系统Block签名 如WKWebView一些系统级block缺失签名,无法动态调用
替换指定ObjectC方法实现 实例/静态方法均可替换实现
动态创建方法供Native/Js调用 需传入方法签名
支持block ObjectC传入JS, JS传入ObjectC均已支持
支持添加属性 为已存在的class添加属性
支持基础数据类型 非id类型,如int,bool均已支持
支持下发纯JS页面 JS代码映射原生代码,动态发布
实现协议 2020年04月01日新增
支持真机无线预览 详细说明
支持Native代码转成JS脚本 在线地址
支持原生网络请求 使用示例

2. 安装

CocoaPods pod 0.6.0

  1. 在 Podfile 中添加 pod 'TTPatch'
  2. 执行 pod installpod update
  3. 导入 "TTPatch.h"

演示项目:Example.xcodeproj

运行效果图

效果图.gif

在线下发补丁执行

在线下发补丁执行.gif

重启后加载已下发补丁

重启后加载已下发补丁.gif

您的喜欢就是我更新的动力