----------------------------------------------------------------------------------------------------------------------------

更新记录

2016年3月4日

JSPatch官方网址:http://jspatch.com/

OC转JS代码工具:http://bang590.github.io/JSPatchConvertor/

----------------------------------------------------------------------------------------------------------------------------

一、前言

  场景一:我们在做iOS开发的过程中,难免会由于自己的不细心导致一些小问题。如果产品没上线之前发现还好,如果上线了才发现问题,那么问题就大了,可能直接影响KPI,更严重的甚至直接面临着fire。

  场景二、一旦上线的产品,如果临时遇到需求变动,那么久必须重新修改代码。一旦修改了项目代码的话,我们就必须重新发版。这样岂不是很麻烦?

  现在就来让我们看一下JSPatch,它的出现可以在不发版的情况下动态的自行修复或者添加新的需求。

二、JSPatch简介  

  JSPatch:它是一个第三方类库,地址如下:

    https://github.com/bang590/JSPatch

  它是JavaScript和OC之间的桥梁,你可以在js文件中去调用任何OC类和方法,然后在js文件中去动态修改OC类。达到不重新发版就更新的效果。它主要是使用的OC runtime实现的。我们可以使用它热更新自己的iOS app。

三、JSPatch使用

  首先,我们去这里下载,然后导入项目工程里面。(个人比较推荐使用cocoapods导入)然后我们在AppDelegate中导入:

#import "JPEngine.h"

然后添加如下代码在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

添加如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[JPEngine startEngine];
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];
NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];
[JPEngine evaluateScript:script];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [ViewController new];
[self.window makeKeyAndVisible];
return YES;
}

其中的demo.js就是我们需要手动去写的一个js代码:

require('UIView,UIColor');

defineClass('ViewController',{

changeBGColor:function() {

var view = self.view();

view.setBackgroundColor(UIColor.yellowColor());

return view;

}

});

我们可以简单看一下demo.js的内容。其中的ViewController就是我们需要更改的类的类名,changeBGColor就是类ViewController中的一个方法,我们可以通过该js去重写该方法,达到不更新OC代码就可以修改程序的效果。

四、项目中的使用

  这里就只是简单的说一下使用,我们可以让后台写一个接口,通过该接口去拿到服务器上的js文件,然后动态修改服务器上js文件,就可以达到热更新的效果。

五、更多

  更多使用可以查看其github主页。

六、附

  源码地址:http://pan.baidu.com/s/1qXvGNGK

转载请标注原文地址:http://www.cnblogs.com/zhanggui/p/5157177.html

iOS第三方类库JSPatch(热更新)的更多相关文章

  1. JSPatch热更新的利器.

    如果用一句话来描述JSPatch,就是利用系统自带的JavaScriptCore.framework配合RunTime机制,进行实时的代码下载与运行.. 而且使用也很简单,启动,加载JS,运行... ...

  2. iOS 第三方类库之MBProgressHUD

    github链接地址 MBProgressHUD是一个开源的第三方类库实现了很多种样式的提示框,类似Activity indicator,使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大, ...

  3. iOS第三方类库汇总【持续更新】

    在我们平时开发中会经常使用一些第三方开发的开源类库.这样会有效地提高我们开发项目的效率,在这里我找了好几十个进行一个汇总,供大家参考使用,方便大家在需要的时候能容易找到. UI篇 awesome-io ...

  4. JSPatch 热更新

    JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C/Swift 原生接口. 获得脚本语言的优势,为项目动态添加 ...

  5. iOS热更新-8种实现方式

    一.JSPatch 热更新时,从服务器拉去js脚本.理论上可以修改和新建所有的模块,但是不建议这样做. 建议 用来做紧急的小需求和 修复严重的线上bug. 二.lua脚本 比如: wax.热更新时,从 ...

  6. iOS热更新实现方式

    heart.jpg 苹果静止热更新,可惜我的是企业app,没有这些约束了,随便用.(当然有些热更新已经可以通过苹果审核了,比如JSPatch)官网说的: JSPatch 平台 SDK 1.7.2 以上 ...

  7. 有关iOS热更新

    iOS热更新的几篇文章,看完这几篇,自己集成一下.下面说一下我集成时遇到的问题. 这是原作者的JSPatch的讲解的文章:<JSPatch – 动态更新iOS APP>.<JSPat ...

  8. React Native之code-push的热更新(ios android)

    React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...

  9. Unity应用的iOS热更新

    Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda •  什么是热更新 •  为何要热更新 •  如何在iOS 上对Unity 应用进行热更新 • ...

随机推荐

  1. Linux下U盘变成只读

    今天用Ubuntu给同学拷贝数据的时候,突然其中一个文件夹U盘就不能复制和删除了.再windows7下可以删除除修改的那个文件夹之外的数据,但修改的那个文件夹死活删除不掉,只读属性也去不掉.再Ubun ...

  2. Winform快速开发组件的实现(一)

    好久好久没有露面了,呵呵,对于写文章都有点生疏了. 在拿到任何一个项目,不管是b/s的还是c/s,我不会立即开始写代码,我一般会为使这些项目能够快速开发制定一系列的支持组件,虽然可能前期会付出一些代价 ...

  3. ServiceStack 介绍

    关于ServiceStack ServiceStack 官网介绍: Opensource .NET and Mono REST Web Services framework 什么是 ServiceSt ...

  4. 理解js中的自由变量以及作用域的进阶

    如果你不知道什么是作用域,建议你先看什么是作用域链,什么是原型链.这篇文章,因为这些内容都是有关联性的. 什么是自由变量? 如我在全局中定义了一个变量a,然后我在函数中使用了这个a,这个a就可以称之为 ...

  5. 玩转PowerShell第二节——【利用PsExec进行远程调用】-技术&分享

    概述 PowerShell用的最多的地方就是远程调用,在远程机器上执行脚本,监控远程机器的状态,如NLB状态,EventLog,SqlServer DataBase状态等. 本篇将讲到用PsExec. ...

  6. Tips7:Unity中 Scene视图 和 Game视图 中 视角(Camera)的控制

    选中你要改变的相机,然后点击GameObject-->Align With View 选项(快捷键Ctrl+Shift+F)使相机视角和当前Sence视图中一样 通过这样可以控制在Game视图( ...

  7. Appium移动自动化测试(四)--one demo

    继续更新. -------------------------------------------- 第四节  安装Appium Client Appium Client是对webdriver原生ap ...

  8. TCP/IP协议(一)

    TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协 ...

  9. 分享几个cocos2dx的小游戏

    先上几个自己写的,因为最近要用cocos2dx,所以就边学边开发几个小游戏玩玩,有捕鱼,连连看,还有打地鼠!都不算完整的项目,不过拿来学习还是可以的,或者在基础上再二次开发,扩展自己! 1:捕鱼的 先 ...

  10. hive的内部表与外部表创建

    最近才接触Hive.学到了一些东西,就先记下来,免得以后忘了. 1.创建表的语句:Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_na ...