将UIWebView替换为WKWebView,但Apple仍然显示相同的错误

问题描述 投票:0回答:1

我已从我的应用中删除了UIWebView。但是,当我将iOS应用程序上载到iTunes时,我仍然收到相同的消息“ Re:ITMS-90809:不推荐使用的API-Apple将停止接受使用UIWebView API的应用程序的提交”

我已在项目中全局搜索UIWebView,没有搜索结果。这只是意味着UIWebView被删除。我也更新了豆荚。

我已使用以下代码验证了应用档案中UIWebView的存在:

grep -r "UIWebView" .

响应为

./BCSymbolMaps/F4DBB519-4BC9-3C29-B017-4C0BD603D250.bcsymbolmap:l_OBJC_PROTOCOL_$_UIWebViewDelegate
./BCSymbolMaps/F4DBB519-4BC9-3C29-B017-4C0BD603D250.bcsymbolmap:l_OBJC_LABEL_PROTOCOL_$_UIWebViewDelegate
./BCSymbolMaps/F4DBB519-4BC9-3C29-B017-4C0BD603D250.bcsymbolmap:-[Crashlytics monitorErrorsForUIWebView:]
./BCSymbolMaps/F4DBB519-4BC9-3C29-B017-4C0BD603D250.bcsymbolmap:CLSWebViewIsUIWebViewAlreadyMonitored
./BCSymbolMaps/63FADF77-FD8F-31A1-9B4E-2799F044786E.bcsymbolmap:l_OBJC_PROTOCOL_$_UIWebViewDelegate
./BCSymbolMaps/63FADF77-FD8F-31A1-9B4E-2799F044786E.bcsymbolmap:l_OBJC_LABEL_PROTOCOL_$_UIWebViewDelegate
./BCSymbolMaps/63FADF77-FD8F-31A1-9B4E-2799F044786E.bcsymbolmap:-[Crashlytics monitorErrorsForUIWebView:]
./BCSymbolMaps/63FADF77-FD8F-31A1-9B4E-2799F044786E.bcsymbolmap:CLSWebViewIsUIWebViewAlreadyMonitored
Binary file ./dSYMs/Eureka.framework.dSYM/Contents/Resources/DWARF/Eureka matches

如何检查仍然导致UIWebView错误的代码?

uiwebview wkwebview deprecated deprecation-warning
1个回答
0
投票

我如何检查UIWebView是否已从项目中完全删除?

解决方案是:

  1. 打开终端。在终端中打开项目的根文件夹。
  2. 运行命令:grep -r“ UIWebView”。
  3. 此命令将列出所有包含“ UIWebView”的窗格。没有更新这些Pod或删除这些Pod并再次执行step 2命令。重复直到所有“ UIWebView”匹配项都没有被删除。


下面是一些步骤,将指导您将现有的UIWebView更新为WKWebView。

将“ WebKit”类导入控制器。

假设您正在使用名为“ webViewMain”的UIWebView。然后转到情节提要,只需将UIWebView替换为UIView。确保已向UIView添加与添加到UIWebView相同的约束。从新的UIView绘制@IBOutlet到UIWebView的现有@IBOutlet。在这里,您需要将@IBOutlet的类从UIWebView更改为UIView,因为您已将UIWebView替换为UIView。

旧代码:@IBOutlet weak var webViewMain: UIWebView!新代码:@IBOutlet weak var webViewMain: UIView!

然后创建一个新变量以创建一个新的WKWebView。代码:var webView : WKWebView!

在UIWebView中将请求/ html加载到的位置下面添加以下代码:

// WKWebView
            // init and load request in webview.
            webView = WKWebView(frame: self.webViewMain.frame)
            webView.navigationDelegate = self            
            self.webView.load(request)
            self.webViewMain.addSubview(webView)
            webView.translatesAutoresizingMaskIntoConstraints = false
// Adding constraints from webView(WKWebView) to webViewMain (UIView)
            webView.leadingAnchor.constraint(equalTo: webViewMain.leadingAnchor, constant: 0).isActive = true
            webView.trailingAnchor.constraint(equalTo: webViewMain.trailingAnchor, constant: 0).isActive = true
            webView.topAnchor.constraint(equalTo: webViewMain.topAnchor, constant: 0).isActive = true
            webView.bottomAnchor.constraint(equalTo: webViewMain.bottomAnchor, constant: 0).isActive = true
            // WKWebView

到目前为止,您已经用WKWebView替换了UIWebView。现在是委托方法。UIWebView具有委托类:UIWebViewDelegateWKWebView具有委托类:WKNavigationDelegate

用WKNavigationDelegate替换UIWebViewDelegate。



现在是UIWebView与WKWebView的委托方法比较:

UIWebView:func webViewDidFinishLoad(_ webView: UIWebView)WKWebView:func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

UIWebView:func webViewDidStartLoad(_ webView: UIWebView)WKWebView:func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)

UIWebView:func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool在这里,我们返回true / false以加载/取消导航。WKWebView:func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)在这里,我们返回decisionHandler(.allow)/ decisionHandler(.cancel)来加载/取消导航。

缩放WebView的方面适合内容(WKWebView)。

var scriptContent = "var meta = document.createElement('meta');"
    scriptContent += "meta.name='viewport';"
    scriptContent += "meta.content='width=device-width';"
    scriptContent += "document.getElementsByTagName('head')[0].appendChild(meta);"
    webView.evaluateJavaScript(scriptContent, completionHandler: nil)

设置webView的高度:

webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
if complete != nil {
    self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: {     (height, error) in
     self.constraintWebViewProductDescriptionHeight.constant = height as! CGFloat
    })
}
})
© www.soinside.com 2019 - 2024. All rights reserved.