----------------------------------------------------------------------------------------------------------------------------html
更新記錄git
2016年3月4日github
JSPatch官方網址:http://jspatch.com/服務器
OC轉JS代碼工具:http://bang590.github.io/JSPatchConvertor/app
----------------------------------------------------------------------------------------------------------------------------jsp
1、前言工具
場景一:咱們在作iOS開發的過程當中,不免會因爲本身的不細心致使一些小問題。若是產品沒上線以前發現還好,若是上線了才發現問題,那麼問題就大了,可能直接影響KPI,更嚴重的甚至直接面臨着fire。ui
場景2、一旦上線的產品,若是臨時遇到需求變更,那麼久必須從新修改代碼。一旦修改了項目代碼的話,咱們就必須從新發版。這樣豈不是很麻煩?lua
如今就來讓咱們看一下JSPatch,它的出現能夠在不發版的狀況下動態的自行修復或者添加新的需求。spa
2、JSPatch簡介
JSPatch:它是一個第三方類庫,地址以下:
https://github.com/bang590/JSPatch
它是JavaScript和OC之間的橋樑,你能夠在js文件中去調用任何OC類和方法,而後在js文件中去動態修改OC類。達到不從新發版就更新的效果。它主要是使用的OC runtime實現的。咱們可使用它熱更新本身的iOS app。
3、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代碼就能夠修改程序的效果。
4、項目中的使用
這裏就只是簡單的說一下使用,咱們可讓後臺寫一個接口,經過該接口去拿到服務器上的js文件,而後動態修改服務器上js文件,就能夠達到熱更新的效果。
5、更多
更多使用能夠查看其github主頁。
6、附
源碼地址:http://pan.baidu.com/s/1qXvGNGK