2020年3月之前已经上线的项目,可以继续使用UIWebView继续迭代版本,每次提交审核会收到苹果的警告邮件;2020年3月之后的项目,必须使用WKWebView,提交审核才能通过,不然提示二进制数据错误。审核不通过
官方已经发布了支持WKWebView的cordova ios@6.1.0,去掉了UIWebVIew,看下面操作:
cordova platforms rm ios
cordova platforms add ios@6.1.0
看完上面就完了,下面开始介绍把现有或者新建的Cordova项目从使用UIWebView浏览器改造成使用WKWebview浏览器
一、首先安装cordova-plugin-wkwebview-engine插件
写给新手:首先cd cordova项目名称下面
比如:
cordova create Demo com.company.app Demo
cd Demo
cordova plugin add cordova-plugin-wkwebview-engine
老手都会添加插件
安装了插件,你再次运行,进行真机调试,日志就能看到using WKWebView,如果这一步做完了,真机运行出现白屏,找到这个文件cordova_plugins.js,里面的插件引用出现了问题,核对一下各个插件的路径对不对。 注意,安装了这个插件之后,就要把iOS最低兼容的iOS版本从iOS 8调到iOS 9+,看下面修改: iOS 9+以上才支持WKWebView,至于苹果为什么要这么做呢,自己去百度百科WKWebVIew,会更安全,功能更强大。
二、解决跨域问题(这才是最重要的问题!)
打开Xcode找到这个文件CDVWKWebViewEngine.m,
找到这个方法,里面添加代码
- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings
{
WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
...
这里还有一部分代码,不用删除
...
//在return上面添加下面两行代码
[configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];
return configuration;
}
解决跨域问题,Cookie获取不到的情况。
三、修改config.xml文件,调整部分功能
1、支持页面右滑返回上一页,左滑进入下一页。
<preference name="AllowBackForwardNavigationGestures" value="true" />
注:前提是你打开过下一页。
特别建议:不建议开启这个功能,因为部分页面逻辑是不让随意返回到上一页的,业务逻辑混乱,数据异常,出现bug。
2、只支持WKWebView设置
<preference name="WKWebViewOnly" value="true" />
其他、3DTouch或者AirPlay什么的功能自己百度解决
四、去除苹果警告,顺利通过苹果审核,上架App Store
你发现,你上面的工作都做了,还是会收到苹果警告邮件或者二进制文件被拒绝。那是因为苹果通过代码检测,你的项目中还是存在UIWebView,下面教你怎么快速去除UIWebView的代码:
1、删除6个文件,看下图:
2、使用Xcode打开你的cordova ios项目,就是双击Demo.xcworkspace文件,搜索替换UIWebView为WKWebView.
这一步要注意,可能有一些三方SDK或者网络框架AFNetWork里面也包含UIWebVIew,这就要去更新这些SDK或者网络框架了,修改成WKWebView之后,运行报错的代码行请注释掉。