iOS第三方類庫JSPatch(熱更新)
來自: http://www.cnblogs.com/zhanggui/p/5157177.html
原文地址:
一、前言
場景一:我們在做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 主頁。
六、附
</div>