zoukankan      html  css  js  c++  java
  • iOS JSPatch 热修复使用

    概述

    一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的。。。),实际使用起来蛮简单的,这里以一个小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

  • 相关阅读:
    换博客啦
    how2heap学习(二)
    hitcontraining_uaf && hacknote
    WHUCTF PWN题目
    记一次AWD
    how2heap学习(一)
    pwnable_start & ciscn_2019_es_2 & ez_pz_hackover_2016 & pwn2_sctf_2016
    pwnable_start (内联汇编)
    2020年5月计划
    一道逆向出题笔记
  • 原文地址:https://www.cnblogs.com/jys509/p/5943600.html
Copyright © 2011-2022 走看看