代码改变世界

iOS JSPatch 热修复使用

  jiangys  阅读(2996)  评论(0编辑  收藏  举报

概述

一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的。。。),实际使用起来蛮简单的,这里以一个小demo演示热修复是如何修复崩溃的,具体更深入的用法,可以看这个
https://github.com/bang590/JSPatch/wiki/JSPatch-%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95

实现原理:https://github.com/bang590/JSPatch/wiki/JSPatch-实现原理详解

使用

1.下载SDK

打开JSPatch网站,下载SDK:http://jspatch.com/Index/sdk

2.导入依赖库

新建一个项目,名为JSPatchDemo,将下载后的JavaScriptCore.framework文件拖到项目中,并导入libz.dylib(或libz.tbd) 和 JavaScriptCore.framework

 

在AppDelegate里配置,startWithAppKey需要配上自己的Key,在第三步会详细介绍。

复制代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [JSPatch startWithAppKey:@"你的APPKey"];
    
    //用来检测回调的状态,是更新或者是执行脚本之类的,相关信息,会打印在你的控制台
    [JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) {
    }];
    
    [JSPatch setupDevelopment];
    
    [JSPatch sync];
    
    return YES;
}
复制代码

在ViewController里写上一个方法为jsPatchTest,用于改变文本的文字。

复制代码
#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _label = [[UILabel alloc] init];
    _label.font = [UIFont systemFontOfSize:14];
    _label.frame = CGRectMake(50, 100, 150, 50);
    _label.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_label];
    
    [self jsPatchTest];
}

- (void)jsPatchTest {
    self.label.text = @"哈哈哈哈哈哈";
}

@end
复制代码

3、获取AppKey并发布

打开JSPatch官网点击左上角注册 -> http://www.jspatch.com/

点新增APP,随便填写APP名,如:

将AppKey填写到AppDelegate--StartWithAppKey中

点击添加版本,填写和工程目录的一致,如1.0

 创建一个main.js文件并在里面写上以下代码

defineClass('ViewController', {
          jsPatchTest : function() {
          self.label().setText("label的text被改掉了");
          },
})

发布补丁

再次重新打开app,你会发现,会报http的错。。。在info.plist里加上如下代码,允许http访问

<key>NSAppTransportSecurity</key>
<dict> 
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

总结

总体使用还是比较简单的,更多功能可以去文档中发掘

补充

1、可能很多人都不会写js补丁,好在JSPatch作者还为我们准备了另一个工具。
http://bang590.github.io/JSPatchConvertor/
这个工具可以帮助我们转换OC代码为JS

 

2、JS一定要加密,下面是方法截图和文档:

文档:http://jspatch.com/Docs/rsa

 

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
历史上的今天:
2014-10-09 .net 调用API并解析Json数据方法
2014-10-09 ASP.NET Post方式提交
点击右上角即可分享
微信分享提示