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, и он все еще будет достаточно гибким, как сегодня.