iOS第三方類庫JSPatch(熱更新)

fldsi7p554 8年前發布 | 24K 次閱讀 JSPatch iOS開發 移動開發

來自: 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 主頁。

六、附

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

</div>

 本文由用戶 fldsi7p554 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!