使用JSPatch平台热修复iosApp

IOS产品开发中常常会遇到这种情况,线上发现一个严重bug,可能是一个crash,可能是一个功能无法使用,这时能做的只是赶紧修复Bug然后提交等待漫长的审核,即使申请加急也不会快到那里去,即使审核完了之后,还要盼望着用户快点升级,用户不升级还是在存在同样的漏洞,这样的情况让开发者付出了很大的成本才能完成Bug的修复。

JSPath就是为了解决这样的问题而出现的,只需要在项目中引入极小的JSPatch引擎,就可以还用JavaScript语言调用Objective-C的原生API,动态更新APP,修复BUG。

JSPaht本身是开源项目,项目地址:http://jspatch.com/,github地址: https://github.com/bang590/JSPatch
在他的官网上面给出了一个例子:

 1 @implementation JPTableViewController
 2 ...
 3 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 4 {
 5   NSString *content = self.dataSource[[indexPath row]];  //可能会超出数组范围导致crash
 6   JPViewController *ctrl = [[JPViewController alloc] initWithContent:content];
 7   [self.navigationController pushViewController:ctrl];
 8 }
 9 ...
10 @end

可以通过下发下面的JavaScript代码修复这个bug:

 1 //JS
 2 defineClass("JPTableViewController", {
 3   //instance method definitions
 4   tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
 5     var row = indexPath.row()
 6     if (self.dataSource().length > row) {  //加上判断越界的逻辑
 7       var content = self.dataArr()[row];
 8       var ctrl = JPViewController.alloc().initWithContent(content);
 9       self.navigationController().pushViewController(ctrl);
10     }
11   }
12 }, {})

JSPtch需要一个后台服务用来下发和管理脚本,并需要处理传输安全等。

注册获取AppKey

在平台上面注册一个账户,新建一个App可以拿到对应的AppKey。

导入SDK到项目中

SDK地址:http://jspatch.com/Index/sdk
当前下载下来的SDK版本名称是:JSPatch 2.framework,需要去掉中间的空格,不然导入项目的时候会报错。
导入项目的时候要选择Copy items if needed
还需要添加对于的依赖框架JavaScriptCore.frameworklibz.tbd.

添加JSPatch代码

在AppDelegate.m中添加代码:

 1 #import "AppDelegate.h"
 2 #import <JSPatch/JSPatch.h>
 3
 4 @implementation AppDelegate
 5
 6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 7     [JSPatch startWithAppKey:@"f78378d77e5783e8"];
 8     [JSPatch sync];
 9     return YES;
10 }
11 @end

在平台中上传js修复文件

为了简单我们只上传一个简单的UIAlertView,弹出一个提示框:

1 ar alertView = require(‘UIAlertView‘).alloc().init();
2 alertView.setTitle(‘Alert‘);
3 alertView.setMessage(‘AlertView from js‘);
4 alertView.addButtonWithTitle(‘OK‘);
5 alertView.show();

用JavaScript实例化了UIAlertView,文件名需要命名为main.js

从服务器下发到客户端

main.js上传到服务器上,下发到版本为1.0的客户端上面。
在请求服务加载脚本的时候出现了一个错误:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
这个错误出现的原因是ios9引入了新特性App Transport Security(ATS),简单来说就是APP内部的请求必须使用HTTPS协议。
很明显这里的url并没有使用https,我们可以通过设置先规避掉这个问题:

1.在info.plist中添加NSAppTransportSecurity类型为Dictionary.
2.在NSAppTransportSecurity中添加NSAllowsArbitraryLoads类型为Boolean,值为YES

运行效果:

时间: 2024-12-28 00:52:00

使用JSPatch平台热修复iosApp的相关文章

热修复JSPatch之实战教程

??接上篇<热修复JSPatch之接口设计>,在这篇文章主要给大家讲述一下如何快速具备热修复能力,当然了如果有人有志于把JSPatch系统的学习,甚至用JSPatch进行开发的,就没有必要听我在这里啰嗦了. 简单了解下JSPatch语法 ??我这里只介绍一些简单常用的. 1. require 在使用Objective-C类之前需要调用 require('className') : require('UIView') var view = UIView.alloc().init() 可以用逗号

探秘手淘高可用平台(三)——热修复和开发流程

本系列文章根据手机淘宝客户端基础架构高级开发工程师非台在安卓绿色联盟开发者大会上的分享,共分三篇,介绍手淘技术团队性能和稳定性系统化提升方案EMAS-MOTU的设计原理以及实现思路. 本文重点介绍手淘高可用平台的热修复方案和如何全开发流程保障性能及稳定性. 热修复方案 热修复有三个场景,手淘EMAS-MOTU平台可以根据场景选择相应的方案进行热修复. 第一个场景是由于代码本身不够健壮,从而导致APP发生崩溃.针对这个问题,手淘开发了Dexpatch框架,可以实时快速对线上问题进行修复. 第二个场

Android 热修复方案分析

绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在Android 基于Proxy/Delegate 实现bug热修复这篇博客中有分解.因为这套方案是在Java端实现,并且是全量更新所以兼容性较好,成功率较高.但是在线上跑了几个月之后就碰到了瓶颈,因为随着业务的增长分拆过之后的dex文件方法数也超过65535个,更换拆包方案的话维护成本太高.同时由于没有做差异

热更新和热修复 个人小结

热修复和热更新 1 热更新和热修复:在线修复程序的 BUG 2 JSPach 的使用原理: OC 是一门动态运行时的语言,方法的运行和对象的创建是在运行时中创建的.JSPatch 正的用运行时,通过JavaScriptCore.framework作为 JS引擎,从 JS 动态调用方法和对象到OC 中,再作用NSInvocation动态调用对应的方法.例 Class class = NSClassFromString(@"UIViewController"); id controller

Tinker 热修复框架模拟使用

导言 前不久,腾讯推出了"微信小程序"这一概念,对移动原生应用的影响可谓巨大.而几乎就在同时,腾讯在GitHub上开源了第一个项目Tinker,这是一个Android平台的应用热修复框架.可以在不重新安装应用的情况下,对应用的代码/库/资源进行更新.相关信息官方也已经给出详细介绍.得到这个消息时,笔者也尝试学习它给的Sample,希望能够使用到自己的项目中去.毕竟热修补是如今原生应用的一大痛点,有了热修补技术,类React Native应用的优势将缩小.这是一篇Tinker简单上手的说

安卓 热修复的原理

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha #热修复技术 APP提早发出去的包,如果出现客户端的问题,实在是干着急,覆水难收.因此线上修复方案迫在眉睫. ###概述 基于Xposed中的思想,通过修改c层的Method实例描述,来实现更改与之对应的java方法的行为,从而达到修复的目的. ###Xposed 诞生于XDA论坛,类似一个应用平台,不同的是其提供诸多系统级的应用.可实现许多神奇的功能.Xposed需要以越狱为前提,

百川解码精彩回顾:热修复的坑和阿里的解

热修复是很多开发者关心的技术,8月27日晚,阿里百川组织了"百川解码"在线直播,以"热修复的坑和阿里的解"为主题,邀请了三位业界嘉宾对热修复技术进行了探讨,并介绍了阿里百川全面接受公测的热修复解决方案:阿里百川HotFix,就网友提出的相关问题进行了解答.本文是此次直播的精彩回顾. 嘉宾简介 歩川,阿里巴巴资深开发工程师,<让App像Web一样发布新版本>一文作者,在OPPO从事Android Framework两年,腾讯QQ空间工作一年半,热衷研究安卓

全面了解Android热修复技术

WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部分成熟的主流APP都拥有自己的热修复技术,像手淘.支付宝.QQ.饿了么.美团等等. 目前能搜集到的资料,大多简单罗列每个方案的特点并进行横向比较,而其中技术发展的脉络往往被掩盖了.热修复技术从何而来,又将往何处去?在这些资料中都找不到答案. 我认为,走马观花地看一遍各家的热修复方案并不能找到答案,所

Android热修复(HotFix)实战

线上的BUG一直是程序员头疼的问题.有时候仅仅是因为几行的代码,就能让你的用户损失严重.谷歌在Android Studio 加入了Insttan Run 机制.通过Apk动态加载的技术实现了应用非安装而进行代码层的改变.之后QQ空间团队的补丁开始了热更新的浪潮.用户不需要通过手动操作,进行App的版本更新,极大的保障了用户对于产品的粘合度,对于开发者而言能使用到这项技术当然再好不过,市面上的热更新,热修复他们的叫称不同,功能相同只是支持的范围有所差别.目前可用的开放平台有腾讯的Tinker以及H