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>