最近一段時(shí)間,為了項(xiàng)目適配 Apple 的最新條例而頭疼,UIWebView 要全部替換為 WKWebView。
先說(shuō)一下目前項(xiàng)目背景,項(xiàng)目是2014年開(kāi)啟的,我在去年接手,然后今年年底就要完全替換 UIWebView,項(xiàng)目中使用的 SDK 大部分都是當(dāng)年集成之后再也沒(méi)有更新過(guò)的,所以看著就心煩。
客戶端的項(xiàng)目剛開(kāi)始是用 Cordova 搭建的跨平臺(tái)應(yīng)用,之后在項(xiàng)目主體架構(gòu)不變的情況下,一步步的將 webAPP 轉(zhuǎn)換成了原生 APP
,項(xiàng)目中的 js 文件全部保留,配置文件也在使用,目前熱更新相關(guān)的已經(jīng)廢棄,在使用的就是以 CDViewController 為基類而實(shí)現(xiàn)的 WebView功能,

此項(xiàng)目的 Cordova-ios 的版本是 4.1.1,內(nèi)核自然也就是 UIWebView,而此次的目標(biāo)就是將版本升級(jí)到 6.1.0,這樣內(nèi)核就切換成了 WKWebView。
google 了一遍之后發(fā)現(xiàn)沒(méi)有適合我這個(gè)項(xiàng)目的升級(jí)攻略,之前官網(wǎng)放出過(guò)臨時(shí)策略,也就是升級(jí)到5.1.1,這個(gè)版本只是棄用了 UIWebView, 但并沒(méi)有移除。
官網(wǎng)1.0解決方案
With the versions that are currently released, make sure that you are:
using cordova-ios@5.1.1
add plugin cordova-plugin-wkwebview-engine, preferably the latest version 1.2.1
-
add the following preference flag WKWebViewOnly to the config.xml iOS platform element.
E.g.<platform name="ios"> <preference name="WKWebViewOnly" value="true" /> </platform> <platform name="ios"> <feature name="CDVWKWebViewEngine"> <param name="ios-package" value="CDVWKWebViewEngine"/> </feature> <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine"/> </platform>
官網(wǎng)2.0解決方案
這個(gè)是升級(jí)到 6.1.0 的方案,直接就移除了 UIWebView 相關(guān)的代碼,但是給出的方案很讓人無(wú)語(yǔ)。步驟很簡(jiǎn)單:
cordova platform remove ios
cordova platform add ios@6.1.0
方案一可以用,但是沒(méi)有一步到位,后期應(yīng)該還要升級(jí)。
方案二,我能說(shuō)啥,這操作,相當(dāng)于讓我把 APP 刪了,沒(méi)了...
最后實(shí)在沒(méi)有輕松的方案,只能使用方案二了,并且用了一種相當(dāng)麻煩的方法完成了升級(jí)。
簡(jiǎn)單地說(shuō),就是先將 ios目錄拷貝一份,然后執(zhí)行方案二的命令行,之后將拷貝的那份與 APP 相關(guān)的文件拷貝回新的 ios 目錄,然后 Build 項(xiàng)目,根據(jù)錯(cuò)誤提示來(lái)配置相應(yīng)的文件即可。
在此實(shí)踐證明,方案二是可行的,就是麻煩許多,切記執(zhí)行命令前一定要把項(xiàng)目進(jìn)行備份。
最后待項(xiàng)目運(yùn)行成功之后,再在項(xiàng)目根目錄執(zhí)行下方代碼:
grep -r UIWebView 項(xiàng)目根目錄
然后就可以看到 Cordova 已經(jīng)不再提示了,也就說(shuō)明升級(jí)成功。
附帶說(shuō)明一下關(guān)于網(wǎng)絡(luò)請(qǐng)求 AFNetWorking 框架的 UIWebView 解決方案:
方案一
pod 'AFNetworking', '~> 4.0' //新版不含UIWebView
方案二
pod 'AFNetworking', '~> 3.0', :source => 'https://github.com/ElfSundae/CocoaPods-Specs.git'
方案二適合老項(xiàng)目,還在用著 3.0版本,又懶得升級(jí)新版修改代碼的。
以上都已經(jīng)在項(xiàng)目中實(shí)踐過(guò),放心參考!