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 热更新相关推荐

  1. iOS热更新实现方式

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

  2. iOS 热更新8种实现方式

    一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...

  3. iOS开发-苹果热更新方案简介

    以下是iOS app热更新的几种方案. 一.动态库 可以做demo用,真实使用的时候会被苹果禁止. 因为 打包发到AppStore的ipa安装包 里的每个动态库 都有唯一的编码,iOS系统会进行验证, ...

  4. IOS 2020 热更新

    先夸夸JSPatch,平台 SDK 1.7.2 以上版本可以通过苹果审核,可以正常使用.Github 开源版本暂不可用. 暂时1.8.0 是需要付费使用的.还需要联系获得,跟阿里的热更新差不多. 阿里 ...

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

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

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

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

  7. ios热更新JSPatch

    由于在公司里使用的是企业级证书,不需发布到APPStore上,那么热更新就有必要写起来了,毕竟要是线上出了Bug,心里还是慌得一笔的哈哈.好了不废话了. 众所周知,如果要使用热更新,那就要使用第三方的 ...

  8. 苹果为什么要禁止 JSPatch 等热更新技术?

    声明:本文为作者投稿,CSDN 基于原文进行了完善,版权为原作者所有,未经作者允许,请勿转载. [CSDN有奖征稿啦]技术之路,共同进步,有优质移动开发.VR/AR/MR.物联网原创技术文章欢迎发送邮 ...

  9. iOS开发-苹果热更新禁止-JSpatch禁止-热更新上线被拒绝

    今天一大早看各个iOS开发群炸锅了,原来是苹果大佬禁止了热更新和JSpatch.导致很多人的项目上线和更新被拒,目前还没有解决方案,也要等着业界大佬们尽快出方案,哈哈. 那么来说说JSpatch有什么 ...

最新文章

  1. 转: linux下的自动对时
  2. 赠书|零压力入门算法的顶流畅销书《漫画算法》
  3. lisp修改界址线属性_如何获取界址线的界址线位置等扩展属性
  4. MongoDB 索引-9
  5. java 手写签名_Android 自定义View手写签名并保存图片
  6. vue大括号里接受一个函数_vue源码探究(第四弹)
  7. 利用 Caddy 轻松实现反向代理/镜像(支持自签SSL证书)
  8. Python3 中你知道有多少错误和异常
  9. Zemax操作--2(单透镜和双胶合透镜优化)
  10. 堆的实现(大量注释)
  11. office 复合文档数据结构解析“初探”
  12. Inoventica干线网络,600 Gbit / s。
  13. openvswitch vxlan 源码分析
  14. html b5纸尺寸,b5纸尺寸大小(b5纸宽高尺寸是多少)
  15. opencv 拍摄并保存照片
  16. 北斗导航开始提供全球服务;个人所得税 App 已上线
  17. Android 计时器实现
  18. WebRTC RTCP XR
  19. 视频监控摄像头的互联网化实践思路
  20. [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现

热门文章

  1. 电脑音频,电脑音频的这个问题怎么解决呢?
  2. Java文本文件切割
  3. 基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型
  4. 电脑中Realtek网卡驱动安装不了如何解决
  5. linux实例显示blocked,(11)ceph 告警:1 slow ops, oldest one blocked for
  6. 阿弗雷德·阿德勒:《自卑与超越》第一章
  7. LeetCode 情侣牵手
  8. QQ开始支持离线传文件
  9. C语言数据结构课程设计-校园导游系统
  10. 【数据挖掘】如何做数据挖掘项目