相信九默,你在看到這篇文章的時候應(yīng)該也已經(jīng)注意到了蘋果公司發(fā)給各位開發(fā)者的郵件了震放。。荤西。
蘋果公司禁止了熱更新和JSpatch澜搅,導(dǎo)致很多人的項目上線和更新被拒,目前還沒有解決方案邪锌,也要等著業(yè)界大佬們盡快出方案勉躺;
Jspatch是什么呢。觅丰。這種技術(shù)只需在項目中引入極小的引擎饵溅,就可以使用JavaScript調(diào)用任何原生接口,獲得腳本語言的能力:動態(tài)更新APP妇萄,替換項目原生代碼修復(fù)bug蜕企。應(yīng)用場景多是線上出現(xiàn)嚴重的bug或者crash率過高時咬荷,引入JSPatch,下發(fā)一個JS腳本的補丁轻掩,來替換掉原生的方法幸乒。
Jspatch的原理是因為Objective-C是動態(tài)語言,OC上所有方法的調(diào)用/類的生成都通過 Objective-C Runtime 在運行時進行唇牧,我們可以通過類名/方法名反射得到相應(yīng)的類和方法(包括私有方法)罕扎。通過Objective-C Runtime的接口,從JS傳遞要調(diào)用的類名函數(shù)名到Objective-C丐重,再使用NSInvocation動態(tài)調(diào)用對應(yīng)的OC方法腔召。
JSPatch讓腳本語言獲得調(diào)用所有原生OC方法的能力,所以實際上它也可以用來做熱更新的工作扮惦,為App動態(tài)的添加功能模塊臀蛛。同樣可以起到React Native的熱更新作用。只不過二者有所區(qū)別崖蜜,RN的框架大浊仆,有自己的開發(fā)平臺,所以學(xué)習(xí)的成本會相對高些纳猪,但開發(fā)起來的效率要高很多氧卧,前提是JS組件要全。氏堤。沙绝。。鼠锈。而JSpatch接入成本非常的小闪檬,對于熟悉OC的客戶端開發(fā)者來說,只需要學(xué)習(xí)簡單的JS語法即可熟練使用购笆,但并沒有開發(fā)平臺粗悯,所以開發(fā)效率會相對較低,而且同欠,JSpatch不是跨平臺的样傍。只從更新能力上來看的話,明顯JSpatch要牛逼很多铺遂。
(二者更詳細的區(qū)別可以參看:http://geek.csdn.net/news/detail/95458?)
高能力但同樣也存在著風(fēng)險:
(一).若在網(wǎng)絡(luò)傳輸過程中下發(fā)明文JS衫哥,可能會被中間人篡改JS腳本,執(zhí)行任意OC方法襟锐,盜取APP里的相關(guān)信息撤逢。可以對傳輸過程進行加密,或用直接使用https解決蚊荣。
(二) 若下載完后的JS保存在本地沒有加密初狰,在未越獄的機器上用戶也可以手動替換或篡改腳本。這點危害沒有第一點大互例,因為操作者是手機擁有者奢入,不存在APP內(nèi)相關(guān)信息被盜用的風(fēng)險。
總之蘋果公司考慮到安全問題媳叨,禁止了這種實現(xiàn)熱更新的方案……
禁止中強調(diào)的是通過遠程腳本更新應(yīng)用程序的行為不符合蘋果開發(fā)者許可協(xié)議俊马。。所以JSpatch和之前PhoneGap中提到的Cordova肩杈、也包括RN的熱更新應(yīng)該都涵蓋在其中,只是應(yīng)用了JSpatch的app率先收到了警告的郵件罷了~
也許有一天解寝,在熱更新大神提供了一套完整的安全性解決策略之后扩然,蘋果會做出適當(dāng)?shù)耐讌f(xié)吧~
附上兩張看到的比較有意思的圖!聋伦!
結(jié)束語:
好了夫偶,大體入門的內(nèi)容已經(jīng)介紹清楚了,相信我們已經(jīng)對React Native的開發(fā)有了初步的了解觉增,接下來需要做的兵拢,我感覺有兩個方向:
①去學(xué)習(xí)前端的React框架和ES6語法等前端知識,補充基礎(chǔ)逾礁,
②抓一個React Native實際項目说铃,強行上手,用到的不會的再查嘹履,時間長了自然就通了腻扇。
第二條走著~~