Заменен UIWebView на WKWebView, но все та же ошибка от Apple

Я удалил UIWebView из своего приложения. Но когда я загрузил приложение iOS в iTunes, у меня все еще было то же сообщение «Re: ITMS-90809: устаревшее использование API - Apple перестанет принимать заявки, которые используют API UIWebView».

Я искал 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?


person Akash Sharma    schedule 03.05.2020    source источник
comment
вот решение аналогичной проблемы   -  person Evgeny Lisin    schedule 27.05.2020


Ответы (1)


Как проверить, полностью ли UIWebView удален из проекта?

Решение:

  1. Открыть терминал. Откройте корневую папку вашего проекта в терминале.
  2. Выполните команду: grep -r "UIWebView".
  3. Эта команда выведет список всех модулей, содержащих «UIWebView». Не обновляйте эти модули или не удаляйте эти модули и повторно выполняйте команду шага 2. Повторяйте, пока все совпадения «UIWebView» не будут удалены.


Ниже приведены некоторые шаги, которые помогут вам обновить существующий UIWebView до WKWebView.

Импортируйте класс «WebKit» в контроллер.

Предположим, вы используете UIWebView с именем «webViewMain». Затем перейдите к раскадровке и просто замените UIWebView на UIView. Убедитесь, что вы добавили в UIView те же ограничения, что и в UIWebView. Нарисуйте @IBOutlet из нового UIView в существующий @IBOutlet UIWebView. Здесь вам нужно изменить класс @IBOutlet с UIWebView на UIView, потому что вы заменили UIWebView на UIView.

Старый код: @IBOutlet weak var webViewMain: UIWebView! Новый код: @IBOutlet weak var webViewMain: UIView!

Затем создайте новую переменную для создания нового WKWebView. КОД: var webView : WKWebView!

Добавьте ниже код, в котором вы загружаете request / html в UIWebView:

// 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

До сих пор вы заменяли UIWebView на WKWebView. Теперь перейдем к методам делегата. UIWebView имеет класс делегата: UIWebViewDelegate. WKWebView имеет класс делегата: WKNavigationDelegate.

Замените UIWebViewDelegate на WKNavigationDelegate.



Теперь идет сравнение методов делегата для 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) / solutionHandler (.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
    })
}
})
person Akash Sharma    schedule 08.05.2020