iOS 通過 JSPatch 即時修複線上 bug!

來源:互聯網
上載者:User

標籤:

JSPatch 是一個開源項目(Github連結),只需要在項目裡引入極小的引擎檔案,就可以使用 JavaScript 調用任何 Objective-C 的原生介面,替換任意 Objective-C 原生方法。目前主要用於下發 JS 指令碼替換原生 Objective-C 代碼,即時修複線上 bug。
除了即時修複線上 bug,甚至為 APP 動態添加一個模組也是可行的,不過可能會有效能問題。
使用JSPatch 需要有一個後台可以下發和管理指令碼,並且需要處理傳輸安全等部署工作。
目前有一個JSPatch 平台提供了一系列的服務,只需引入一個 SDK 就能使用 JSPatch,只是還在內測中....
地址 :https://github.com/bang590/JSPatch

CocoPods安裝:

Podfile檔案

platform :ios, ‘6.0‘
pod ‘JSPatch‘

然後

pod install

下面開始使用:我們先建立一個列表,再通過JSPath改變行數

1.我們先在Controller裡加入一個列表,讓他顯示3行 ,代碼如下:

#import "JRViewController.h"@interface JRViewController ()<UITableViewDataSource,UITableViewDelegate>@property(nonatomic,strong)UITableView* myTableView;@end@implementation JRViewController- (void)viewDidLoad {    [super viewDidLoad];    UITableView* tv =[[UITableView alloc]initWithFrame:self.view.bounds                                             style:UITableViewStylePlain];    self.myTableView = tv;    self.myTableView.delegate = self;    self.myTableView.dataSource = self;    [self.view addSubview:self.myTableView];}#pragma mark -- UITableViewDataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 3;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString* i=  @"cell";    UITableViewCell* cell = [tableView  dequeueReusableCellWithIdentifier:i];    if (cell == nil ) {        cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault                                reuseIdentifier:i];    }    cell.textLabel.text = @"title";    return cell;}

運行一下,顯示3行,沒問題


Paste_Image.png

2.建立js檔案 New File -> ios -> Empty .....


Paste_Image.png

3.在js檔案中 寫入:

 //將JRViewController類中的- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法替換掉defineClass(‘JRViewController‘, {            tableView_numberOfRowsInSection: function(tableView, section) {            return 10;            },            });

關於JSPath的具體使用,請自行查閱:https://github.com/bang590/JSPatch/wiki

4.調用這個js檔案,代碼如下:

#import "AppDelegate.h"#import "JPEngine.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    [JPEngine startEngine];    NSString* path = [[NSBundle mainBundle]pathForResource:@"JSPathTest" ofType:@"js"];    NSString* js = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];    [JPEngine evaluateScript:js];    return YES;}

運行一下,現在是顯示10行了 !


Paste_Image.png

註:
如果我們想要通過 JS 指令碼替換原生 Objective-C 代碼,即時修複線上 bug的話,還是要通過伺服器下發 js指令碼 !

代碼如下:

[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://........"]]                                   queue:[NSOperationQueue mainQueue]                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {    NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];    [JPEngine evaluateScript:script];}];

工具
將OC代碼裝換成JSPatch script

iOS 通過 JSPatch 即時修複線上 bug!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.