JSPatch 可讓你用 JavaScript 書寫原生 iOS APP

簡介

 
JSPatch 能夠讓你用 JavaScript 書寫原生 iOS APP。只需在項目引入極小的引擎,就能夠使用 JavaScript 調用任何 Objective-C 的原生接口,得到腳本語言的優點:爲項目動態添加模塊,或替換項目原生代碼實時修復 bug。

JSPatch 在 Github 開源 4 個月已經有2K+ star,公司內已應用在微信/微信讀書/騰訊地圖上,公司外許多知名產品像美團/螞蜂窩/去哪兒/蘑菇街/同程等都已接入上線。

Github 項目主頁:https://github.com/bang590/JSPatch

功能清單

 

JSPatch 相對於另外一個 hotfix 框架 waxPatch,有如下優點:html

  1. 小巧:只有 1300 行 OC 代碼與 170 行 JS 代碼
  2. JS語言:終端應用最普遍的腳本語言,無需另外學習
  3. 完善的功能支持:線程安全,支持64位,支持Block,支持任意類型參數的傳遞轉換
  4. 完善的單元測試:每個功能點都有單元測試保證健壯性
  5. 斷點調試腳本:經過接入 Safari 控制檯能夠斷點調試 JS 腳本
  6. 完善的文檔:大量文檔資料可供參考
  7. 開源社區支持:大量知名 APP 使用,Github關注度高,至今已有10位社區成員貢獻代碼
  8. 符合蘋果審覈規則:蘋果不容許下發可執行代碼,但經過 JavaScriptCore.framework 執行的JS代碼除外,詳見這裏

 

快速上手

 

例如線上 APP 有一段代碼出現 bug 致使大量 crash:ios

  1. @implementation JPTableViewController
  2. ...
  3. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  4. {
  5.   NSString *content = self.dataSource[[indexPath row]];  //可能會超出數組範圍致使crash
  6.   JPViewController *ctrl = [[JPViewController alloc] initWithContent:content];
  7.   [self.navigationController pushViewController:ctrl];
  8. }
  9. ...
  10. @end

能夠經過下發這樣一段 JS 代碼,覆蓋掉原方法,修復這個 bug:git

  1. //JS
  2. defineClass("JPTableViewController", {
  3.   //instance method definitions
  4.   tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
  5.     var row = indexPath.row()
  6.     if (self.dataSource().length > row) {  //加上判斷越界的邏輯
  7.       var content = self.dataArr()[row];
  8.       var ctrl = JPViewController.alloc().initWithContent(content);
  9.       self.navigationController().pushViewController(ctrl);
  10.     }
  11.   }
  12. }, {})

 

FAQ常見問題

 

詳見Github wiki:https://github.com/bang590/JSPatch/wikigithub

 

源碼概況

源碼路徑: http://tc-svn.tencent.com/components/JSPatch_proj
該組件已有  1 次源碼更新操做。
最近提交:
bangchen 在  JSPatch 組件中提交了89個源碼變動,版本號:  2 。
提交備註:init
2015-09-14 19:42:19
 
 
 
http://pub.code.oa.com/project/home?comeFrom=task_cc_weekly_personal_20151012&projectName=JSPatch&ticket=15D7EB787388C77B72FE3437987F068C36B68AFA86BBC3C726BFD6A65EFC77FA907EC23EE985ABD6A2E957FD38BA388
相關文章
相關標籤/搜索