你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> JSPatch學習

JSPatch學習

編輯:IOS開發綜合

JSPatch 是一個 IOS 靜態更新框架,只需在項目中引入極小的引擎,就可以運用 JavaScript 調用任何 Objective-C 原生接口,取得腳本言語的優勢:為項目靜態添加模塊,或交換項目原生代碼靜態修復 bug。 原文

閒話不說進入正題:復雜集成JSPatch SDK
以下進程為參照JSPatch官方集成引見寫就

第一步 取得 AppKey

在平台上注冊帳號,可以恣意添加新 App,每一個 App 都有一個獨一的 AppKey 作為標識。

第二步 集成SDK

經過 cocoapods 集成

在 podfile 中添加命令:
pod ‘JSPatchPlatform’
再執行 pod install 即可。

留意: 若運用 XCode8 接入,需求在項目 Capabilities 翻開 Keychain Sharing 開關,否則在模仿器下載腳本後會呈現 decompress error, md5 didn’t match 錯誤(真機無論能否翻開都沒問題):
JSPatch學習

第三步 運轉

在 AppDelegate.m 裡載入文件,並調用 +startWithAppKey: 辦法,參數為第一步取得的 AppKey。接著調用 +sync 辦法反省更新。:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [JSPatch startWithAppKey:@"9a013eaea38bc749"];
    [JSPatch sync];

    // set rootViewController
    self.Window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    JPViewController *rootViewController = [[JPViewController alloc] init];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    self.Window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsCompact];

    return YES;
}

至此 JSPatch 接入終了,下一步可以開端在後台為這個 App 添加 JS 補丁文件了。

上述例子是把 JSPatch 同步放在 -application:didFinishLaunchingWithOptions: 裡,若希望補丁能及時推送,可以放在 -applicationDidBecomeActive: 裡,每次喚醒都能同步更新 JSPatch 補丁,不需求等用戶下次啟動:

#import <JSPatchPlatform/JSPatch.h>
@implementation AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
    [JSPatch startWithAppKey:@"你的AppKey"];
    [JSPatch sync];
    ...
}
@end
第四步 測試:在後台為這個 App 添加 JS 補丁

預備.js文件
JSPatch學習
main.js中的示例代碼(定義了兩個控制器類文件, 並改寫或增添了一些辦法):

defineClass('JPViewController', {
  handleBtn: function(sender) {
    var tableViewCtrl = JPTableViewController.alloc().init()
    self.navigationController().pushViewController_animated(tableViewCtrl, YES)
  }
})

defineClass('JPTableViewController : UITableViewController <UIAlertViewDelegate>', ['data'], {
  dataSource: function() {
    var data = self.data();
    if (data) return data;
    var data = [];
    for (var i = 0; i < 20; i ++) {
      data.push("cell from js " + i);
    }
    self.setData(data)
    return data;
  },
  numberOfSectionsInTableView: function(tableView) {
    return 1;
  },
  tableView_numberOfRowsInSection: function(tableView, section) {
    return self.dataSource().length;
  },
  tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") 
    if (!cell) {
      cell = require('UITableViewCell').alloc().initWithStyle_reuseIdentifier(0, "cell")
    }
    cell.textLabel().setText(self.dataSource()[indexPath.row()])
    return cell
  },
  tableView_heightForRowAtIndexPath: function(tableView, indexPath) {
    return 30
  },
  tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
     var alertView = require('UIAlertView').alloc().initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("Alert",self.dataSource()[indexPath.row()], self, "OK",  null);
     alertView.show()
  },
  alertView_willDismissWithButtonIndex: function(alertView, idx) {
    console.log('click btn ' + alertView.buttonTitleAtIndex(idx).toJS())
  }
})

接上去就要在JSPatch的管理後台上傳該main.js文件了(可以設置下發限制):
JSPatch學習
這之後運轉項目便能懇求到設置的腳本.

JPViewConroller.m中代碼

#import "JPViewController.h"

@implementation JPViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 200, [UIScreen mainScreen].bounds.size.width - 40, 50)];
    [btn setTitle:@"to JPTableViewController" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(handleBtn:) forControlEvents:UIControlEventTouchUpInside];
    [btn setBackgroundColor:[UIColor grayColor]];
    [self.view addSubview:btn];
}

- (void)handleBtn:(id)sender
{
}

@end

效果圖:
JSPatch學習

以上可見, 我並沒有在原生App中寫很多代碼, 包括定義JPTableViewController. 但最終完成了較多的功用, 這些功用都是在js中添加了.

demo下載: github

【JSPatch學習】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved