Заменил UIWebView на WKWebView, но все равно та же ошибка от Apple - PullRequest
0 голосов
/ 03 мая 2020

Я удалил 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?

1 Ответ

0 голосов
/ 08 мая 2020

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

Решение:

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


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

Импортировать « WebKit ”класс для контроллера.

Предположим, вы используете UIWebView с именем« webViewMain ». Затем go к вашей раскадровке и просто замените 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!

Добавьте ниже код, куда вы загружаете запрос / 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.



Теперь добавлено сравнение методов делегата для WI: UIWebView: *1036* *1039**1040* * 10View *

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.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
    })
}
})
...