ITMS-90809: Устаревшее использование API - Apple прекратит принимать представления приложений, использующих API UIWebView

Вчера я загрузил свое приложение в TestFlight, и через некоторое время Apple отправила мне это предупреждение:

ITMS-90809: Устаревшее использование API - Apple прекратит прием заявок на приложения, использующие API UIWebView. Смотрите https://developer.apple.com/documentation/uikit/uiwebview для получения дополнительной информации.

Дело в том, что я не использую UIWebView в своем приложении, поэтому я попытался обновить свои модули, но все еще то же самое. Таким образом, это моя третья сборка на TestFlight, и это первый раз, когда Apple посылает мне это. Есть идеи?

Обновление

Это мои стручки:

pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'Firebase/MLVision'
pod 'Firebase/MLVisionTextModel'
pod 'SVProgressHUD'
pod 'SPPermission/Camera'
pod 'SPPermission/PhotoLibrary'
pod 'Mantis'
pod 'SwiftKeychainWrapper'
pod 'SwiftyOnboard'
pod 'Fabric'
pod 'Crashlytics'

Обновление 2

Похоже, я нашел рамки с проблемой.

Binary file ./Pods/FirebaseMLCommon/Frameworks/FirebaseMLCommon.framework/FirebaseMLCommon matches
Binary file ./Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics matches
Binary file ./Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision matches

Так что теперь я должен ждать, пока Google исправит их и обновит мои модули?

Ответы

Ответ 1

Я отвечу на свой вопрос, так как у меня есть новости об этом письме. Google сказал мне, что есть несколько билетов на эту проблему, и они собираются решить эту проблему как можно скорее. Кроме того, сегодня мое приложение было одобрено для AppStore, поэтому на данный момент это всего лишь предупреждение.

Ответ 2

Вы можете проверить каждую из платформ в заархивированном приложении и посмотреть, ссылаются ли они на UIWebView. Из командной строки cd в архивированное приложение, например:

cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app

После этого используйте команду nm, чтобы вывести символы вашего приложения и каждой из структур приложения:

nm myapp | grep UIWeb
for framework in Frameworks/*.framework; do
  fname=$(basename $framework .framework)
  echo $fname
  nm $framework/$fname | grep UIWeb
done

Это, по крайней мере, скажет вам, какая структура является виновником.

Ответ 3

Проверьте, используете ли вы в своем коде класс UIWebView; если да, замените вашу реализацию на WKWebView, иначе нужно проверить ваши блоки.

Зайдите с терминалом в папку вашего проекта и выполните команду: grep -r "UIWebView" .

Все подходящие стручки должны быть обновлены. Теперь я застрял, потому что я нашел UIWebView в Google AdMob (версия 7.49.0), и я жду новую версию от Google.

Ответ 4

В моем случае Firebase/Auth использовал устаревший API UIWebView, а версия, которую я использовал, была более старой. Поэтому я только что обновил модуль Firebase/Auth, используя команду

pod update 'Firebase/Auth'

Примечание: чтобы выяснить, какие фреймворки используют этот API, просто выполните поиск по запросу "UIWebView" (cmd + shift + F)

Ответ 5

Используйте последнюю версию Firebase

https://firebase.google.com/support/release-notes/ios

Версия 6.8.1: Удалены ссылки на UIWebViewDelegate для соответствия предупреждению о подаче заявки в App Store (# 3722).

Ответ 6

Если вы собираете с помощью Unity 3D, это проблема, связанная с ноу-хау (подтверждено в журналах изменений), в настоящее время она исправлена для версии 2019.3 (тестируется и переносится обратно).

Проверьте билет здесь https://unity3d.com/unity/whats-new/2019.2.4

Ответ 7

Когда вы создаете приложение Ionic, вы можете выбрать между Cordova или Capacitor для развертывания собственной мобильной версии. Хотя в более поздних версиях WKWebView используется автоматически, Cordova по-прежнему напрямую использует API-интерфейсы UIWebView или содержит ссылки на них (Capacitor был обновлен для удаления этих ссылок - см. ниже).

После отправки приложения Apple выполняет поиск кода приложения для строки "UIWebView", а затем генерирует предупреждение об отправке, если оно найдено. Поэтому в будущем выпуске cordova-ios (библиотека iOS для Cordova) потребуется, чтобы обеспечить удаление всех ссылок на API-интерфейсы UIWebView.

другая мысль. Я не знаю, имеет ли это смысл или технически возможно.

Переместите UIWebView в плагин и заставьте cordova-ios использовать этот или некоторые из плагинов WKWebView. Cordova-IOS просто содержит код для загрузки веб-просмотра. По умолчанию следующая версия должна загружать Apache WKWebViewEngine (плагин установлен по умолчанию в новых приложениях, инструкция по миграции для старых приложений). Пользователи, которым нужен UIWebView, Ionic, fork или другие, могут указать свой собственный, как сейчас.

Таким образом, ни один UIWebView не будет в Cordova-IOS, и он все еще будет достаточно гибким, как сегодня.