使用 WKWebView 替换 UIWebView
date
May 27, 2020
slug
wkwebview-uiwebview
status
Published
tags
summary
type
Post
最近把一个 iOS 项目中的 UIWebView 替换为 WKWebView。这对于我们这种使用了很多 H5 页面的 App 来说的确是一个大更新。 开始前我以为最麻烦的在于有些 UIWebView 中提供了 Javascript 桥接调用原生代码的功能要重新适配。后来发现,因为这部分功能是通过 WebViewJavascriptBridege 实现的,所以反而没有占用很多时间。
我遇到的最大的一个坑是原来的 UIWebView 中的图片是通过原生代码下载后通过一个桥接函数
setImage
重新设置到 img 的 src 属性的(为了统一控制缓存)。但是 WKWebView 中的 img 标签无法将一个本地图片地址设置到 src。最后的解决办法居然是在 App 内启动了一个 Web 服务器。在项目代码中被改动最大的是原来 UIWebViewDelegate 要全部改成 WKNavigationDelegate。好在原来的方法都能找到对应的版本,理清楚对应关系后就简单了很多。
当我觉得代码都已经替换好了之后,我打包上传到 App Store Connect。 但是我还是立刻收到了邮件提醒我还在使用 UIWebView。后来我才想起来原来很多第三方库中可能没有更新的。 由于我们这个项目没有使用任何包管理工具,所有的第三方库都是直接把静态库文件或者
framework
拖进项目中的。我只能对每个几十个库的二进制文件进行检查。涉及到使用 UIWebView 的,就重新去下载新版本的库文件。还有很多第三方库虽然已经不再使用了,但是代码中还是留着调用。 我不得不把他们一个个去掉。 这一块实在是太花时间了。