前言說明:
? ? 前段時(shí)間看新浪微博的一些文章,有位葉大神提到 JSPatch 的作者和一些關(guān)于 JSPatch 的文章,遂去了解了一下.
1.可以干什么(了解 JSPatch)
? ? 蘋果開發(fā)者,要想你編寫的應(yīng)用讓更多的人下載使用,你就必須讓你的應(yīng)用上傳到蘋果應(yīng)用商店.一旦蘋果商店里面的應(yīng)用出現(xiàn)bug,你就要解決 bug, 然后從新更新版本. 如果從新更新的話蘋果審核快則一個(gè)星期,慢則半個(gè)月,在此期間用戶對(duì) App 的體驗(yàn)就會(huì)很差,一旦是重大的 bug, 更需要即時(shí)更改.雖然今年六月份之后 App 上線的速度快了很多,大概兩天左右,但是遇到比如崩潰等問題,也是需要越即時(shí)修復(fù)線上 bug.
JSPatch利用javascript調(diào)用蘋果原生的接口,替換任意的 Objective-C,修復(fù)線上 bug.
2.準(zhǔn)備工作
1.在 JSPatch 平臺(tái)注冊(cè),新添加 App,生成 AppKey, 和很多第三方平臺(tái)注冊(cè)一樣.
2.在該平臺(tái)下載 SDK,集成到項(xiàng)目里面
3.導(dǎo)入JavaScriptCore.framework框架,這個(gè)框架是JavaScript 調(diào)用 OC 原聲接口用的
3.使用 JSPatch
1.導(dǎo)入頭文件
#import <JSPatch/JSPatch.h>
2.在application:didFinishLaunchingWithOptions:方法里面測試一下怎么用 JSPatch
[JSPatch testScriptInBundle];
注意:實(shí)時(shí)性不高的 App 在application:didFinishLaunchingWithOptions:方法里面調(diào)用一次就行了,實(shí)時(shí)性高的 App 在applicationDidBecomeActive:里面調(diào)用
4.測試
1.項(xiàng)目測試

每組多少個(gè),默認(rèn)返回一組

?cell 的復(fù)用

跑完程序一定崩潰
2.新建 main.js 文件

直接把 File 文件改成 main.js


3.然后在main.js里面用 javascript代理直接調(diào)用蘋果的原生代碼進(jìn)行更改
defineClass("ViewController", {
tableView_cellForRowAtIndexPath:function(tableView, indexPath) {
varcell = tableView.dequeueReusableCellWithIdentifier("cell")
if(!cell) {
cell = require('UITableViewCell').alloc().initWithStyle_reuseIdentifier(0,"cell")
}
cell.textLabel().setText("1")
returncell
},
}
)
這里對(duì)項(xiàng)目里面 ViewController類里面的tableView_cellForRowAtIndexPath:這個(gè)方法進(jìn)行了從新編寫,用的是javascript,這樣你在跑一下就不會(huì)崩潰了,因?yàn)閺男戮帉懥藅ableView_cellForRowAtIndexPath:這個(gè)方法里面的代碼,然后這一句cell.textLabel().setText("1")就相當(dāng)于self.textlable.text = @"1";
所以得到了實(shí)現(xiàn)了javascript更改 OC 源代碼
還有一些關(guān)于線上版本的管理,灰度和條件發(fā)布,自定義RSA密鑰必要和安全問題沒有介紹以后補(bǔ)上,還有這個(gè) JSPatch 調(diào)用次數(shù)超過一定量的時(shí)候,會(huì)收取一定的費(fèi)用,具體收多少, JSPatch 有介紹