iOS開發那些事兒(一)熱補丁

來源:互聯網
上載者:User

標籤:

一.熱補丁作用:修複導致崩潰的錯誤、替換/增加方法、替換原來的介面等等

 

二.實現手段:JSPatch (使用Objective-C Objective-C和JavaScript jspatch橋。你可以調用任何Objective-C類和方法在JavaScript中的只是其中一小發動機。這使應用程式擷取指令碼語言的力量:添加模組或更換Objective-C代碼來修複漏洞動態)。傳送門:https://github.com/agelessman/JSPatch

 

三.Demo:

  1. JSPatch匯入:拷貝 JSEngine.m 、JSEngine.h 、JSPatch.js到工程。添加依賴庫 JavaScriptCore.framework
  2. 實現部分:
    • APPDelegate中的實現策略如下:
       1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2      3     /** 這裡熱更新的實現思路:info.plist記錄一個當前的版本號碼,每次程式開啟的時候都去後台擷取當前最新的版本號碼。拿這個最新版本號碼與本地的版本號碼比對,如果匹配成功---->不進行任何操作;如果匹配失敗---->下載js檔案進行熱更新 */ 4      5     //1.開啟JP引擎 6     [JPEngine startEngine]; 7      8     //2.js檔案路徑 9     NSString * jsPath = [[NSBundle mainBundle] pathForResource:JSName10                                                         ofType:@"js"];11     12     //3.設定編碼格式13     NSString * script = [NSString stringWithContentsOfFile:jsPath14  encoding:NSUTF8StringEncoding15  error:nil];16 17 //4.熱更新18  [JPEngine evaluateScript:script];19 20 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];21 22  [self.window addSubview:[self genView]];23 24 self.window.rootViewController = [[ViewController alloc]init];25 26  [self.window makeKeyAndVisible];27 28 return YES;29 }
      
           
      1 /** 建立一個View到當頁面,我們的目標利用js檔案來動態修改這個方法 */2 -(UIView *)genView3 {4     UIView * newView        = [[UIView alloc]initWithFrame:CGRectMake(0, 0,KDeviceWidth,KDeviceHeight)];5     newView.backgroundColor = [UIColor grayColor];6     return newView;7 }
    • 編寫JS檔案:
       1 // demo.js 2 require(‘UIView, UIColor, UILabel‘) 3 defineClass(‘AppDelegate‘, { 4   // 替換這個 -genView 方法 5   genView: function() { 6     var view = self.ORIGgenView();                           7     view.setBackgroundColor(UIColor.greenColor())             //修改背景色 8     var label = UILabel.alloc().initWithFrame(view.frame()); //建立一個label 9 label.setText("JSPatch");10 label.setTextAlignment(1);11  view.addSubview(label);12 return view;13  }14 });

四.實現原理:

  • 基礎原理:能做到通過 JS 調用和改寫 OC 方法最根本的原因是 Objective-C 是動態語言,OC 上所有方法的調用 / 類的產生都通過 Objective-C Runtime 在運行時進行,我們可以通過類名 / 方法名反射得到相應的類和方法(runtime入門教程傳送門:http://blog.csdn.net/lizhongfu2013/article/details/9496705 )p.s:runtime是Objective-C的重要部分,如果想進階中高階iOS程式猿runtime理論必須要掌握。會與不會真的兩個境界!!
  • 底層原理:傳送門:http://blog.cnbang.net/tech/2808/ p.s:建議大概瞭解下runtime介面再仔細閱讀這篇部落格,真心贊

 

五.弊端:

  • JS檔案是在網路上傳遞需要考慮安全性。如果在傳輸過程中被別人截獲並篡改的話,這對APP的安全性以及保密性的傷害可想而知。
    • 解決方式:加密、Https讓js檔案以密文或者更安全的鏈路傳遞
  • JS檔案一般偷摸下載之後會儲存到本地檔案。如果使用者越獄之後可以用一個叫filelBox(大概是一個)的軟體可以讀寫沙箱中的檔案。從而影響APP的穩定性
    • 解決方式:本地下載之後儲存也需要加密,不要明文的形式展示

iOS開發那些事兒(一)熱補丁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.