TTPatch一款轻量热更新框架
原理
基于JavaScript+runtime实现动态调用/替换/新增方法/
Class
背景
因为老东家58版本迭代块,需求多,导致很多需求开发质量以及测试质量不高. 线上经常会出现一些小bug很是头疼.所以有了搞一个热修复的轮子.
关于业界的成熟方案
下面列举一些个人了解,并不全面,请谅解.
lua
.JavaScript
.Oc
作为脚本,滴滴方案(为开源).
其实热更新在游戏开发领域已经很成熟了,无论那一种实现方案思路都是类似的.
如图1.1将Object-C Code
转换成一种中间语言下发,然后本地执行中间语言通过Object-C
的动态性实现达到动态调用的目的.
作为技术选型,因为在58以RN
开发,所以对JavaScript
所以选择JavaScript
作为中间语言.
看到这里很多同学就会问啦,请问你跟JSPatch
有什么区别?
其实原理都是
JavaScript
当做中间语言实现的,但是技术细节是不一样的. 有一些参考了JSPatch
的思路.
为什么JSPatch
不能过审,你的TTPatch
就可以过审?
首先
JSPatch
github开源版本已经被下架,集成了开源版本的app
基本也都难以通过上架. 但是收费版依然可以上架. 这就说明本身以JavaScript
为中间语言的热更新手段并没有本堵死. 而且我了解到很多大厂也集成了热更新模块. 所以热更新不可行是因为JSPatch
本身的原因. 具体可查看关于热更新被拒绝的审核条款.
关于上架
目前已经有多个
APP
集成TTPatch
成功上架.
项目进度
支持热更新 / 热修复80%场景
为了防止发生JSPatch
的悲剧, 建议加群了解上架问题
QQ群:978337686 本项目会持续维护
项目地址 github
您的star就是我开发的动力.
关于上架
风险提示: 请配合服务器下发开关使用, 通过配置决定
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
- 在 Podfile 中添加
pod 'TTPatch'
。 - 执行
pod install
或pod update
。 - 导入 "TTPatch.h"
演示项目:Example.xcodeproj
运行效果图
在线下发补丁执行
重启后加载已下发补丁
您的喜欢就是我更新的动力