最近一段时间,为了项目适配 Apple 的最新条例而头疼,UIWebView 要全部替换为 WKWebView。
先说一下目前项目背景,项目是2014年开启的,我在去年接手,然后今年年底就要完全替换 UIWebView,项目中使用的 SDK 大部分都是当年集成之后再也没有更新过的,所以看着就心烦。
客户端的项目刚开始是用 Cordova 搭建的跨平台应用,之后在项目主体架构不变的情况下,一步步的将 webAPP 转换成了原生 APP
,项目中的 js 文件全部保留,配置文件也在使用,目前热更新相关的已经废弃,在使用的就是以 CDViewController 为基类而实现的 WebView功能,
此项目的 Cordova-ios 的版本是 4.1.1,内核自然也就是 UIWebView,而此次的目标就是将版本升级到 6.1.0,这样内核就切换成了 WKWebView。
google 了一遍之后发现没有适合我这个项目的升级攻略,之前官网放出过临时策略,也就是升级到5.1.1,这个版本只是弃用了 UIWebView, 但并没有移除。
官网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>
官网2.0解决方案
这个是升级到 6.1.0 的方案,直接就移除了 UIWebView 相关的代码,但是给出的方案很让人无语。步骤很简单:
cordova platform remove ios
cordova platform add ios@6.1.0
方案一可以用,但是没有一步到位,后期应该还要升级。
方案二,我能说啥,这操作,相当于让我把 APP 删了,没了...
最后实在没有轻松的方案,只能使用方案二了,并且用了一种相当麻烦的方法完成了升级。
简单地说,就是先将 ios目录拷贝一份,然后执行方案二的命令行,之后将拷贝的那份与 APP 相关的文件拷贝回新的 ios 目录,然后 Build 项目,根据错误提示来配置相应的文件即可。
在此实践证明,方案二是可行的,就是麻烦许多,切记执行命令前一定要把项目进行备份。
最后待项目运行成功之后,再在项目根目录执行下方代码:
grep -r UIWebView 项目根目录
然后就可以看到 Cordova 已经不再提示了,也就说明升级成功。
附带说明一下关于网络请求 AFNetWorking 框架的 UIWebView 解决方案:
方案一
pod 'AFNetworking', '~> 4.0' //新版不含UIWebView
方案二
pod 'AFNetworking', '~> 3.0', :source => 'https://github.com/ElfSundae/CocoaPods-Specs.git'
方案二适合老项目,还在用着 3.0版本,又懒得升级新版修改代码的。
以上都已经在项目中实践过,放心参考!