iOS開發(fā) — JSPatch

因為后端服務切換,線上有個版本可能會受到影響,奈何蘋果審核周期太尼瑪長啊,所以打算在不發(fā)布新版的情況修復問題。

因為之前老大有讓了解一個叫做"JSPatch"的東西,當時為了應付老大(我是真正的懶),先植入到了版本中去了(現(xiàn)在想想真是萬幸),但是對于JSPatch如何調用真是一點都不知道啊。

這不周一中午老大和我講起這事情,下午就讓我出個方案給他,前提就是使用JSPatch更新我們的代碼。

好吧,廢話不說,寫完這遍我還要回家呢,女程序緩天天加班到現(xiàn)在,真是。。。

網上搜JSPatch,如上圖,總體而言,都是差不多的,所以一些基本的東西里面我也不會列舉出來了。首先分享兩個工具。

1 想了解JSPatch的我建議還是先去官網看看,可點擊我是官網

2 覺得把OC轉為JS很麻煩,可以通過這個工具點我點我,雖然轉化后不一定準確,但是大部份還是OK的。

這次主要做的就是更換了原來代碼的中兩個方法(包含網絡請求,Block回調)及插入一個新界面?;谠砟銈兌伎梢园俣鹊?,我就分享一下在寫JS的過程中我遇到的幾個問題吧,有些問題肯定很低級,誰讓我是一個偽程序緩呢。其中這些問題也是在沒有發(fā)現(xiàn)轉換工具的時候遇到的,不過遇到了總歸是好事情。

1 首先我是在Block那邊卡了殼,當時也不知道有轉換工具,因為我的網絡請求牽涉到簽名等問題,如你們所知,在JS里面進行簽名那就是竹籃打水—一場空。后來還是通過JS回調OC斛決了簽名問題。Block也進行了拆分完成,后來通過轉換工具發(fā)現(xiàn)其實并不需要拆分。

2 字符串比較問題,當我用console.log輸入一模一樣的值時,比較后的結果卻是不一樣的邏輯,JS里面的“等于”是恒等于"==="的意思,但字符串卻不是這樣的,仍然和OC里面差不多

var a = 'hehe';

var b ='hehe';

console.log(a);

console.log(b);

if ( a.isEqualToString(b) ){

? console.log('我們是一樣的哦');

}

3 在構建的新界面上給Button添加方法時消磨了我不少時間,轉化出來的為

sendBtn.addTarget_action_forControlEvents(self, @selector("onSendBtnClick:"), 64);

但是程序運行起來就崩潰啊,我真的討厭崩潰,另外說一點,由于我不會斷點在JS里面調試,都是通過console.log()輸出,這樣的效率真是太太太差了。

最后嘗試了這樣的方式,竟然OK了,btn.addTarget_action_forControlEvents(self, "onSendBtnClick:", 64);(64是指"UIControlEventTouchUpInside"對應的值,左移6位即2的6次方),在JS里面只能識別具體的值,是不是覺得JS很聰明呢。

在 iOS8 下,JSPatch 支持使用 Safari 自帶的調試工具對 JS 腳本進行斷點調試,聽到這個消息是不是很開心伐,我一向是個愛分享的主兒,當然不會藏著嘍,現(xiàn)在就分享出來:

啟動調試工具

首先需要開啟 Safari 調試菜單:Safari -> 偏好設置 -> 高級 -> 勾選[在菜單欄中顯示“開發(fā)”菜單]

接著啟動APP -> Safari -> 開發(fā) -> 選擇你的機器 -> JSContext

即可開始調試。

連接真機調試時,需要打開真機的web檢查器:設置 -> Safari -> 高級 -> Web檢查器

資源列表

資源列表列出了 JSPatch 所有執(zhí)行中的腳本文件,點開文件后可以對其進行斷點調試。

通過 [JPEngine evaluateScript:script] 接口執(zhí)行的腳本,在資源列表里都表示為 main.js。

通過 [JPEngine evaluateScriptWithPath:filePath] 接口執(zhí)行的腳本,在資源列表里會以原文件名表示。

4 獲取屏寬

var viewFrame = self.view().frame();

var SCREEN_WIDTH = viewFrame.width;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容