美文网首页
swift中级-- 热更新- JSPatch

swift中级-- 热更新- JSPatch

作者: 111ZZzz | 来源:发表于2019-05-15 10:40 被阅读0次

本文为转载文章 . 版权归原文所有。

原文链接:iOS 5分钟集成热修复(JSPatch)

前言

在iOS中有很多种热修复方案,在这里我就不一一介绍了

这里有一篇介绍热修复的文章:

iOS中的HotFix方案总结详解

我选择的热修复方案是JSPatch

我觉得JSPatch的优点有:

非侵入式

上手快

相关服务成熟

上代码

大神可以看重点,如果是和我一样的菜鸡就可以按照博客一步一步做,最后一定会成功让JSPatch跑起来的

第一步:创建Demo,在ViewController里添加一个Label,声明一个test方法来给Label.text赋值

OC:

Swift:

为了方便label就直接在StoryBoard里拖进来了(不喜欢拖控件的小伙伴可以用代码创建)

Swift中为每个变量和方法添加dynamic是保证Swift方法都可以被动态替换,这里涉及到Swift Runtime的知识就不详细讲述了按例贴一篇文章:

Swift Runtime分析:还像OC Runtime一样吗?

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

第三步:项目配置(这步稍微会有些复杂)

将解压后的SDK直接拖入工程中,然后在TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加 libz.dylib(或libz.tbd) 和 JavaScriptCore.framework。

在AppDelegate里写以下代码:

OC

- (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];returnYES;}

Swift

funcapplication(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)->Bool{// Override point for customization after application launch.JSPatch.startWithAppKey("你的Appkey")JSPatch.setupCallback { (type, data, error)inprint(type)print(data)      }JSPatch.setupDevelopment()JSPatch.sync()returntrue}

到这一步项目配置就完成了,下一步开始发补丁到项目中

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

注册或登录

注册

第五步:创建你的App,名字可以随便写,AppID也可以不填

第六步:点击添加APP版本,创建一个App版本

介绍一下创建之后的APP:

appKey是之后在你项目中激活JSPatch要用到的

添加App版本 是按照你App的Version来创建的(如果version没写对会下载不到补丁)

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

OC

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

          },

})

Swift

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

          },

})

Swift覆盖方法和类的时候要加上项目名,所以规范应该是 项目名.类名(方法名) 注册类的时候也要加上项目名

第八步:点击刚刚创建的1.0,将保存好的JS上传到JSPatch服务器上,

选择文件选择刚刚创建的main.js (上传补丁的时候最少要有一个main.js 如果需要上传多个文件点击右侧加号就可以了)

一定先勾选开发预览,这样才能保证测试成功

一切都操作完之后选择提交

运行你的项目,如果命令行中显示以下内容就代表你的你的项目已经更新补丁了

因为补丁是先下载再生效的,所以下一次运行你才能看到效果

可以看到我的代码给label赋值为aaaa,通过JSPatch将label.text替换掉了

如果遇到什么问题可以留言给我,我会及时回复并更新博客内写的不足的地方

一些其他的资料:

JSPatch文档

iOS黑科技之不发版线上干掉bug(JSPatch)

Objective-C代码转换成JavaScript

可能遇到的坑

JSPatch网站上的版本要一定要和工程里的一样

label的名字别写错了..我顺手就给写成别的名字了

Swift一定要在方法和属性前加dynamic,如果不是继承自NSObject的Swift类不能被动态替换

Swift替换类和方法要比OC在类/方法名之前添加工程名

如果项目跑起来控制台输出没有找到文档就是网站上配置错了

基本使用姿势

发现bug->在项目里修复bug->将修改后的有问题的类和方法翻译成js并上传网站->发布补丁

8月27日补充

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

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

加密方法:

相关文章

  • swift中级-- 热更新- JSPatch

    本文为转载文章 . 版权归原文所有。 原文链接:iOS 5分钟集成热修复(JSPatch) 前言 在iOS中有很多...

  • JSPatch 热更新

    JSPatch 有提供一个平台服务省心省力-->http://jspatch.com/ 集成开发环境 官网的提示还...

  • JSPatch 热更新

    JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任...

  • 我喜欢的优秀开源项目

    1.热更新 JSPatch。 网址:http://jspatch.com,优势,持续更新升级,有详细使用文档。 2...

  • iOS热更新-JSPatch

    这是之前在公司做的演讲做的PPT,就不一一的敲一遍了,直接截图PPT上传分享给大家吧。

  • iOS 热更新JSPatch

    1.倒入核心文件的名字JPEngine.m、JPEngine.h、JSPatch.js。 2.在AppDelega...

  • 使用JSPatch做Swift热更新 - iOS开发

    JSPatch为我们iOS开发带来了一个新的迭代更新方式,使我们应用开发人员可以像手游一样在线修复代码,进行功能升...

  • iOS热更新-8种实现方式

    一、JSPatch 官网:http://www.jspatch.com 怎么使用官网文档写的很清楚。 热更新时,从...

  • 十七、weex

    十七、weex 1.实现原理 2.热更新技术,JSPatch

  • iOS热更新(热修复)_JSPatch

    JSPatch小结 例子: app上线了,遇到了重大bug,提交新版本要审核几天,为了避免用户流失,需要马上将bu...

网友评论

      本文标题:swift中级-- 热更新- JSPatch

      本文链接:https://www.haomeiwen.com/subject/mrguaqtx.html