产品必懂技术术语-什么是app热更新?热更新和热修复

4747 59 2022-12-12

本文讲了产品必懂技术术语-什么是app热更新?热更新和热修复。

🌈1.app热更新的方式

app版本更新迭代分为整包更新和热更新。

整包更新是整个app安装包需要重新下载安装,它通过应用市场来更新,整包的体积比较大,下载速度慢。

热更新就是动态下发代码,当用户打开app时,通过网络下载升级包来直接更新,不需要发布新版本到应用市场。升级包的体积比较小,下载速度快。

发布一个app新版本,要上架到应用市场是需要审核的。

ios应用市场审核很严格而且审核需要一定的时间,android市场也一样,遇到一些节假日会往后延期。

热更新的方式可以绕过应用市场的审核,所以对于紧急的bug修复以及实时性较强的功能发布(比如运营活动)比较适合。

那么,app所有功能的更新都可以使用热更新吗?

🌈2.热更新的适用条件

因为应用市场比较多,下面就重点讲下苹果app store的热更新条款。

app store禁止滥用热更新机制。

因为当开发者提交代码到app store审核通过后,开发者可能会通过热更新方式修改app 原生代码导致安全隐患,这就违反了苹果的安全隐私政策。

比如2017年2月时,苹果就发现了某种热更新方式,存在安全漏洞,如果黑客发现并利用了这个后门,

他们就能够访问到设备中的照片、麦克风和剪贴板数据以及其他涉及个人隐私的功能。

为了应用生态的安全可控,一般来说,如果涉及到更改了app 原生代码的更新,苹果都要求审核。

app的开发框架非常多,下面举个例子来讲下。

假设开发app使用的是react native框架,如果只是修改了图片资源、js代码,是可以使用热更新机制更新代码的,但是如果更改了native原生的代码,就违反了苹果的审核条款。

我选择的热修复方案是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];  return YES;
    }

  • Swift

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

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


第四步:打开JSPatch官网点击左上角注册 

注册或登录

注册


第五步:创建你的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替换掉了

上文就是小编为大家整理的产品必懂技术术语-什么是app热更新?热更新和热修复。

国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)Finclip软件分析、比较及推荐。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。