JSPatch 热更新
JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C/Swift 原生接口。 获得脚本语言的优势,为项目动态添加模块,或替换项目原生代码动态修复 bug,听起来是不是很秀,但是过不了审核!
过不过审核不要紧,重在探索嘛,其实我是在企业包加入的JSPatch
JSPatch官网:http://www.jspatch.com
1.注册JSPatch账号,创建应用,获取AppKey和私钥
2.生成 RSA 密钥
在 Mac 终端上执行 openssl,再执行以下三句命令,生成 PKCS8 格式的 RSA 公私钥,执行过程中提示输入密码,密码为空(直接回车)就行。
openssl >
genrsa -out rsa_private_key.pem 1024
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
这样在执行的目录下就有了 rsa_private_key.pem 和 rsa_public_key.pem 这两个文件。这里生成了长度为 1024 的私钥,长度可选 1024 / 2048 / 3072 / 4096 …。
3.生成公钥
可以通过 RSA配置自动生成 工具生成配置代码,打开 rsa_public_key.pem
,复制内容到框里点击 生成配置代码 就可以了
4.工程配置代码,OC代码通过桥接文件在Swift中调用
把SDK下载下来,拖入工程,或者cocoapods集成
pod 'JSPatchPlatformx' pod 'JSPatch'
/** JSPatch appKey */static NSString *const kJSPatchKey = @"jsPatch官网申请的AppKey";static NSString *const kJSPatchPublicKey = @"-----BEGIN PUBLIC KEY-----\n 生成的公钥 \n-----END PUBLIC"[JSPatch startWithAppKey:kJSPatchKey];[JSPatch setupRSAPublicKey:kJSPatchPublicKey];[JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error {NSLog(data,error); }];[JSPatch showLog];
#ifdef DEBUG[JSPatch setupDevelopment];
#endif[JSPatch sync];[JSPatch testScriptInBundle]; /// 测试本地js补丁方法 如果打开此方法-以上方法需要全部屏蔽
Swift中使用注意事项:
所有自定义的属性和方法前面要加 @objc dynamic关键字,使其拥有runtime属性,才可以动态去修改,可以参考作者此文 [https://www.cnblogs.com/canghaixiaoyuer/p/5367760.html]
并且一定要继承NSObject的类才支持修改,例如继承Array就不支持修改
补丁的版本号一定要和工程版本号同步
注意在 JSPatch 平台的规范里,JS脚本的文件名必须是 main.js
使用 defineClass() 覆盖 Swift 类时,类名应为 项目名.原类名,例如项目 demo 里用 Swift 定义了 ViewController 类,在 JS 覆盖这个类方法时要这样写:
defineClass(‘demo.ViewController’, {})对于调用已在 swift 定义好的类,也是一样:
require(‘demo.ViewController’)
5.配置补丁JS文件
如下:
defineClass('JSPatchSwift.KXCrashTableVC', {viewDidLoad: function() {console.log('js viewDidLoad begin')self.ORIGviewDidLoad()console.log('js viewDidLoad end')},testLog: function() {console.log('js ViewController testlog')},tableView_cellForRowAtIndexPath: function(tableView, indexPath) {console.log('tableView_cellForRowAtIndexPath testlog')var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier")cell.textLabel().setText(self.dataArray().toJS()[indexPath.row()])return cell}
})
- 通过[JSPatch testScriptInBundle]; 方法测试没有问题,补丁上传到JSPatch官网后台即可
- 补丁只能留存一个版本,不能叠加,当下一个版本发布时尽快用原生代码替换
最后附上代码地址:https://github.com/KXZHANGL/KXJSPatchSwift
JSPatch 热更新相关推荐
- iOS热更新实现方式
转发 链接:https://www.jianshu.com/p/00111d447e7e 苹果静止热更新,可惜我的是企业app,没有这些约束了,随便用.(当然有些热更新已经可以通过苹果审核了,比如JS ...
- iOS 热更新8种实现方式
一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...
- iOS开发-苹果热更新方案简介
以下是iOS app热更新的几种方案. 一.动态库 可以做demo用,真实使用的时候会被苹果禁止. 因为 打包发到AppStore的ipa安装包 里的每个动态库 都有唯一的编码,iOS系统会进行验证, ...
- IOS 2020 热更新
先夸夸JSPatch,平台 SDK 1.7.2 以上版本可以通过苹果审核,可以正常使用.Github 开源版本暂不可用. 暂时1.8.0 是需要付费使用的.还需要联系获得,跟阿里的热更新差不多. 阿里 ...
- IOS热更新-JSPatch实现原理+Patch现场恢复
关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...
- iOS热更新解读(三)—— JSPatch 之于 Swift
继承自 NSObject 的 Swift 类 修改属性 新建 Swift 工程 SwiftJSPatch. AppDelegate.swift: // in AppDelegate.swift --- ...
- ios热更新JSPatch
由于在公司里使用的是企业级证书,不需发布到APPStore上,那么热更新就有必要写起来了,毕竟要是线上出了Bug,心里还是慌得一笔的哈哈.好了不废话了. 众所周知,如果要使用热更新,那就要使用第三方的 ...
- 苹果为什么要禁止 JSPatch 等热更新技术?
声明:本文为作者投稿,CSDN 基于原文进行了完善,版权为原作者所有,未经作者允许,请勿转载. [CSDN有奖征稿啦]技术之路,共同进步,有优质移动开发.VR/AR/MR.物联网原创技术文章欢迎发送邮 ...
- iOS开发-苹果热更新禁止-JSpatch禁止-热更新上线被拒绝
今天一大早看各个iOS开发群炸锅了,原来是苹果大佬禁止了热更新和JSpatch.导致很多人的项目上线和更新被拒,目前还没有解决方案,也要等着业界大佬们尽快出方案,哈哈. 那么来说说JSpatch有什么 ...
最新文章
- 转: linux下的自动对时
- 赠书|零压力入门算法的顶流畅销书《漫画算法》
- lisp修改界址线属性_如何获取界址线的界址线位置等扩展属性
- MongoDB 索引-9
- java 手写签名_Android 自定义View手写签名并保存图片
- vue大括号里接受一个函数_vue源码探究(第四弹)
- 利用 Caddy 轻松实现反向代理/镜像(支持自签SSL证书)
- Python3 中你知道有多少错误和异常
- Zemax操作--2(单透镜和双胶合透镜优化)
- 堆的实现(大量注释)
- office 复合文档数据结构解析“初探”
- Inoventica干线网络,600 Gbit / s。
- openvswitch vxlan 源码分析
- html b5纸尺寸,b5纸尺寸大小(b5纸宽高尺寸是多少)
- opencv 拍摄并保存照片
- 北斗导航开始提供全球服务;个人所得税 App 已上线
- Android 计时器实现
- WebRTC RTCP XR
- 视频监控摄像头的互联网化实践思路
- [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现