iOS 可用的熱更新发框、熱修復(fù)方案

前言

JSPatch雖然在兩年前被蘋果郵件警告躺彬,但是ReactNative依然盛行,只不過ReactNative并沒有對Native進行熱修復(fù)的功能梅惯,只是動態(tài)下發(fā)新的bundle模塊宪拥。動態(tài)加載而已。

很多時候線上出現(xiàn)bug铣减,可能是很小她君,很細微的。對此我們可能僅僅需要改動一個返回值就能解決線上bug葫哗。但是實際上我們并沒有這么一套機制去對線上bug進行熱修復(fù)缔刹,只有通過發(fā)版才能解決,這樣對用戶很不友好劣针。

解決方案

Rollout.io 校镐、 JSpatch、 DynamicCocoa捺典、React Native鸟廓、 Weex、Wax 襟己、Hybrid
其實業(yè)界還是有很多方案的 -_-!

看了一下JSPatch的使用文檔引谜,其實就是把JS代碼通過Oc的動態(tài)運行時,將JS方法調(diào)用映射到Oc的對應(yīng)類和方法擎浴。
我們的技術(shù)棧儲備如下:

<objc/runtime>
<objc/message>
JS

js會寫點煌张,ES5就可以。

下面就可以開始退客。按照JSPatch文檔提供的功能骏融,一步一步自己實現(xiàn)對應(yīng)功能链嘀,想一下。以后大家就可以在手機上寫代碼档玻,很刺激吧~

TTPatch開發(fā)問題記錄

現(xiàn)在開發(fā)成果已經(jīng)可以熱修復(fù)怀泊,熱更新,動態(tài)調(diào)用Oc方法误趴,參數(shù)返回值類型處理霹琼,方法hook

對熱更新、hook凉当、感興趣的同學(xué)可以下載demo玩玩枣申。后續(xù)會跟目前JSPatch支持的功能看齊,但是具體實現(xiàn)是不一樣的哦看杭。大家可以對比一下各自實現(xiàn)的優(yōu)缺點忠藤。
我知道肯定是我寫的low,算是拋磚引玉吧~楼雹,希望大家提問模孩,指正。

Commit問題記錄

1.內(nèi)存問題

解決方式 使用 __unsafe_unretained 修飾臨時變量贮缅,防止 strong修飾的臨時變量在局部方法結(jié)束時隱式調(diào)用 release榨咐,導(dǎo)致出現(xiàn)僵尸對象

2.Oc調(diào)用js方法,多參數(shù)傳遞問題

這里面利用arguments和js中的apply,就可以以多參數(shù)調(diào)用谴供,而不是一個為數(shù)組的obj對象

3.關(guān)于添加addTarget——action方法

為View對象添加手勢響應(yīng)以及button添加action時块茁,action(sender){sender為當(dāng)前控制器 self} 為什么Oc中使用的時候sender為當(dāng)前的手勢orbutton對象?
如果Native未實現(xiàn)action方法桂肌,那么會導(dǎo)致獲取方法簽名失敗而導(dǎo)致我們無法拿到正確參數(shù)数焊,所以獲得的參數(shù)為當(dāng)前self.
這里要記錄強調(diào)一下,如添加不存在的action時轴或,要注意action參數(shù)不為當(dāng)前的事件響應(yīng)者.

4.JS調(diào)用Oc方法,如何支持 多參數(shù)仰禀、多類型 調(diào)用

首先照雁,我們要講目標ClassforwardingInvocation:方法替換成我們自己的實現(xiàn)TTPatch_Message_handle
然后通過替換方法的方式答恶,將目標方法的IMP替換為msg__objc_msgForward,直接開始消息住轉(zhuǎn)發(fā)饺蚊,這樣直接通過消息轉(zhuǎn)發(fā)最終會運行到我們的TTPatch_Message_handle函數(shù)中,在函數(shù)中我們可以拿到當(dāng)前正在執(zhí)行方法的invocation對象悬嗓,這也就意味著我們可以拿到當(dāng)前調(diào)用方法的全部信息污呼,并且可以操作以及修改。我們也是通過這個方法來實現(xiàn)包竹,返回值類型轉(zhuǎn)換燕酷。返回值類型轉(zhuǎn)發(fā)這里涉及到

然后通過替換方法的方式籍凝,將目標方法的IMP替換為msg__objc_msgForward,直接開始消息住轉(zhuǎn)發(fā),這樣直接通過消息轉(zhuǎn)發(fā)最終會運行到我們的TTPatch_Message_handle函數(shù)中苗缩,在函數(shù)中我們可以拿到當(dāng)前正在執(zhí)行方法的invocation對象饵蒂,這也就意味著我們可以拿到當(dāng)前調(diào)用方法的全部信息,并且可以操作以及修改酱讶。我們也是通過這個方法來實現(xiàn)退盯,返回值類型轉(zhuǎn)換。返回值類型轉(zhuǎn)發(fā)這里涉及的細節(jié)比較多泻肯,暫時只說一下最好的一種解決方案渊迁。

《--------------------Github地址----------------》

上傳一張Demo動態(tài)圖

TTPatch2.gif

感興趣的讀者可以下載玩一玩.歡迎提出寶貴意見

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灶挟,隨后出現(xiàn)的幾起案子琉朽,更是在濱河造成了極大的恐慌,老刑警劉巖膏萧,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漓骚,死亡現(xiàn)場離奇詭異,居然都是意外死亡榛泛,警方通過查閱死者的電腦和手機蝌蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曹锨,“玉大人孤个,你說我怎么就攤上這事∨婕颍” “怎么了齐鲤?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長椒楣。 經(jīng)常有香客問我给郊,道長,這世上最難降的妖魔是什么捧灰? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任淆九,我火速辦了婚禮,結(jié)果婚禮上毛俏,老公的妹妹穿的比我還像新娘炭庙。我一直安慰自己,他們只是感情好煌寇,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布焕蹄。 她就那樣靜靜地躺著,像睡著了一般阀溶。 火紅的嫁衣襯著肌膚如雪腻脏。 梳的紋絲不亂的頭發(fā)上鸦泳,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音迹卢,去河邊找鬼辽故。 笑死,一個胖子當(dāng)著我的面吹牛腐碱,可吹牛的內(nèi)容都是我干的誊垢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼症见,長吁一口氣:“原來是場噩夢啊……” “哼喂走!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谋作,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芋肠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后遵蚜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帖池,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年吭净,在試婚紗的時候發(fā)現(xiàn)自己被綠了睡汹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡寂殉,死狀恐怖囚巴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情友扰,我是刑警寧澤彤叉,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站村怪,受9級特大地震影響秽浇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甚负,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一柬焕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腊敲,春花似錦击喂、人聲如沸维苔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介时。三九已至没宾,卻和暖如春凌彬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背循衰。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工铲敛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人会钝。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓伐蒋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迁酸。 傳聞我的和親對象是個殘疾皇子先鱼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容