iOS+JSPatch在线修改app功能-b

什么是热更新?

举个例子,你的app上架了,但是突然想添加个小功能,那么你有两种方法
  • 第一种方法:在原生代码中修改源代码,然后提交到appStore,这个过程真是很漫长...虽然最近我提交的都是一两天就能得到反馈,但是没人能保证苹果的服务态度一直这样好.有可能10天半个月的也没时间给你审核.我把这个称为冷更新!
  • 第二种方法:就是利用一些三方平台.现在比较火的就是JSPatch之前有(Wax)了. 用官网 的介绍JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C 原生方法。目前主要用于下发 JS 脚本替换原生 Objective-C 代码,实时修复线上 bug。总之我的认识就是:不用通过重新上架app项目到appstore便可以修改一些小问题!很大程度提高了开发以及维护的效率

JSPatch SDK的接入

JSPatch 基础用法

最后就用JSPatch 这个平台打印一个HelloWorld

  • 本地测试
#import "ViewController.h"static NSString *identifer = @"cellID";@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>@property (nonatomic, strong) UITableView *tableView;@end@implementation ViewController- (void)viewDidLoad {
    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.//    NSLog(<#NSString * _Nonnull format, ...#>)
    [self.view addSubview:self.tableView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}

- (UITableView *)tableView {    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
        _tableView.dataSource = self;
        _tableView.delegate = self;
        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:identifer];

    }    return _tableView;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    return 4;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifer];

    cell.textLabel.text = [NSString stringWithFormat:@"第%ld行", indexPath.row];    return cell;

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {    NSLog(@"OC--第%ld行", indexPath.row);
}@end
//APPDelete.m- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.//    [JSPatch startWithAppKey:@"891dfb388fe263a1"];//    [JSPatch sync];

     [JSPatch testScriptInBundle];    return YES;
}
  • 然后添加 main.js文件

    defineClass("ViewController", {tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
    
         console.log("JSPath--:",indexPath.row());
    
      }})

上面的main.js文件在app启动的时候!会被自动调用:功能就是覆盖ViewController里面的这个方法

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {    NSLog(@"OC--第%ld行", indexPath.row);
}

在调用main.js文件之前

程序的运行结果是这样的

使用JSPatch之前.gif

在调用main.js文件之后

程序的运行结果是这样的

使用JSPatch之后.gif

到这里大家应该已经看出了这个JSPatch的强大!这还只是本地测试,当你要修改程序内容的时候得在本地修改main.js文件

线上测试  (其实就是把main.js文件传到JSPathch的后台)

线上发布新补丁.png

然后在APPDelete.m中修改代码

//APPDelete.m- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.
    //891dfb388fe263a1 这个是你在JSPatch后台创建应用的时候自动生成的appKey
    [JSPatch startWithAppKey:@"891dfb388fe263a1"];
    [JSPatch sync];//     [JSPatch testScriptInBundle];  /** 同时删除本地的main.js文件 */

    return YES;
}

线上JSPathch.png

最后附上github源代码:https://github.com/yuzhouheike/JSPathch-

时间: 2024-09-30 05:50:55

iOS+JSPatch在线修改app功能-b的相关文章

学习制作iOS程序第二天:创建子目录、更改项目名称、修改启动画面、修改类前缀、新建启动控制器、修改APP图标

四.根据实际情况创建相应的目录 删除系统默认的部分文件ViewController.h,ViewController.m,Main.storyboard.LaunchScreen.xib 目录根据情况创建,每个人都会不一样的.我的如下. 五:更改项目名称 1.进入项目的Targets属性,找到Build Settings,搜索Product Name,修改属性为真实的软件名称. 2.打开Supporting Files目录下的Info.plist,修改Bundle name为真实的软件名称. 3

WinForm修改App.config配置文件功能

WinForm修改App.config配置文件主要是通过System.Configuration.dll里ConfigurationManager类来实现,在功能开发前是需要手动引用该dll文件. ConfigurationManager 类包括可用来执行以下任务的成员: ?从配置文件中读取一个节.若要访问配置信息,请调用 GetSection 方法.对于某些节,例如 appSettings 和 connectionStrings,请使用 AppSettings 和 ConnectionStri

为VisualSVN Server增加在线修改用户密码的功能

原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过,它本身并没有提供在线修改密码的功能.由于在实际使用过程中,一旦SVN的用户比较多,只单单依靠windows的管理控制台去修改密码 显然是不太合适的. 总不能任何人想改个密码还要通过管理员吧?所以,就想为其增加在线修改密码的功能. 说实话,网上已经有了可以在线修改密码的方法.试用过,也的确可以.不过

ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:https://github.com/niexiaobo/ 实现功能 :播放视频 ,视频后台下载 (真机调试功能正常) 1.使用ZFPlayer播放视频(可以在线和本地播放,基于AVPlayer,调节音量和屏幕亮度) 2.使用 WHCNetWorkKit 实现下载,后台下载(多任务同时下载,单任务下载,

JSPatch动态更新APP

JSPatch,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. 用途 是否有过这样的经历:新版本上线后发现有个严重的bug,可能会导致crash率激增,可能会使网络请求无法发出,这时能做的只是赶紧修复bug然后提交等待漫长的AppStore审核,再盼望用户快点升级,付出巨大的人力和时间成本,才能完成此次bug的修复. 使用JSPatch可以解决这样的问题,只需在项目中引入JSPa

Swift实现iOS录音与播放音频功能

作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFoundation.h> AVAudioSession中配置选项: AVAudioSessionCategory 注意:除了 AVAudioSessionCategoryMultiRoute 外,其他的 Category 都遵循 last in wins 原则,即最后接入的音频设备作为输入或输出的主设备. 1.

iOS 9推广告屏蔽功能,移动营销界也做了哪些动作?(转)

观察数字营销行业发展历程可以看出,每一种新广告形式.新产品刚被市场发现之时,就是蕴含价值量最大的时候,如同未被挖掘的金矿一样.网盟.积分墙.广点通.热搜,最早敢于吃这些“螃蟹”的人到后来都赚得盆满钵满而功成身退. 但也有些产品出来后,则会给市场和企业带来致命的威胁,如最近苹果iOS 9推出广告屏蔽功能. 今天Fmarketing就为大家搜罗了数字营销界最近新出的产品和推广方式,让大家防患于未然的同时抓住机会,看谁能够先胆大心细抢占山头,圈一块地.分一杯羹了. 苹果iOS 9推出广告屏蔽功能:应用

电商app功能开发流程+方案

hello,各位大咖!开发一款app到底有哪些流程?从零到完善运营,还有版本择选,方向度可精准?分享分享感想: 一款移动电商APP开发从零到完善运营,大概要经历一下几个步骤流程:1.电商APP开发需求:要开发制作一款移动电商APP,不仅仅要了解用户可以在APP上实现什么功能,还要了解企业为什么要制作一款电商APP,在这个基础上,要了解满足上面的功能,APP需要支持哪些功能.如果APP的功能仅仅与网页端的功能没有太大差异的话,那么开发的意义也不大.当这些确定后,再去跟开发制作公司去谈. 2.电商A

final版——爱阅APP功能说明书

爱阅APP功能说明书 一.引言 以下内容是final版的功能说明书. 新增功能: 1.WiFi传书 2.书友群跳转 3.网址内部打开 4.设置-->关于爱阅 5.设置-->TXT文本文本翻页效果 6.设置-->检查更新 7.设置-->清楚缓存 二.工具 安卓手机 爱阅APP安装包 三.使用方法 1.下载APP 用浏览器的扫一扫功能,扫描图1的二维码,结果如图2.点击图2中的"下载",下载爱阅APP安装包. 图1 2.安装 如图3,点击"安装"