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


91

Вчера я загрузил свое приложение в 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 исправит их и обновит мои модули?


Проверьте, какие модули вы используете, и используют ли они UIWebView. Например, баннерные SDK, но вы можете также проверить и другие SDK.
Gerharbo

1
@Gerharbo Я использую только модули Firebase и не могу найти внутри них UIWebView.
Ник

Для тех, кто использует cordova + reactjs (или angular), ознакомьтесь с cordova-plugin-wkwebview-engine и cordova-plugin-wkwebviewxhrfix
Jacksonkr

Ответы:


104

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

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

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


23
Когда я ввел команду в терминале, я получаю следующее предупреждение «grep: warning: recursive search of stdin», и оно не возвращает никакого ответа даже через 30 минут. Любые идеи?
Durai Amuthan.H

1
Работает отлично. Я использовал это, чтобы узнать, что UnityAds.framework использует UIWebView. Их нужно обновить до WKWebView.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Apollo

1
Возможно, вы получите результат, как показано ниже. Соответствует двоичный файл /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate. Я решил это, удалив мою xcworkspace и снова установив pod.
ShaoJen Chen

2
Вы все еще получаете этот @WilliamNardo? Несмотря на то, что я обновил предполагаемый выпуск, чтобы исправить это: " 7.55.0 Removed all references to UIWebView. UIWebView is no longer supported." Installing Google-Mobile-Ads-SDK 7.56.0 (was 7.53.1), я все еще получаюBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169

17
@ DuraiAmuthan.H проверьте, что вы добавили точку / точку (.) В конце команды grep. Сначала я сделал ту же ошибку
Вилли

68

Вы можете изучить каждую из фреймворков в заархивированном приложении, чтобы узнать, относятся ли они к 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

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


Спасибо за ответ, это очень помогло. Я обновлю свой вопрос с дополнительной информацией.
Ник

Итак, теперь единственное, что я могу сделать, это подождать, пока Google решит проблемы?
Ник

2
Да, вам нужно будет подождать (или исправить их самостоятельно и отправить запрос на перенос). Я не уверен, каков точный крайний срок, чтобы удалить все варианты использования UIWebView, но я очень сомневаюсь, что это произойдет до выхода iOS 13 этой осенью.
Rudedog

@Rudedog как я могу исправить работу фрейма самостоятельно? Прежде всего спасибо за ваш ответ ... после того, как после вашего ответа, кажется , что у меня есть 4 рамки, которые используют UIWebView >>>>>> Alamofire Космос NMSSH Stripe
ДЖОННИ

2
@johnny вам придется клонировать каждый репозиторий и выяснить, где они используют UIWebView, удалить или заменить код, который его использует, и, возможно, отправить запросы на вытягивание, если вы хотите, чтобы ваши изменения вернулись в основной репозиторий. Или вы можете просто подождать, пока разработчики исправят это сами. Как я упоминал ранее, прямо сейчас Apple просто предупреждает разработчиков об этом и на самом деле не отвергает двоичные файлы, поэтому у вас есть время подождать, пока разработчики восходящего потока исправят ситуацию.
Rudedog

9

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


Привет, вы можете найти какое-то решение, я тоже столкнулся с той же проблемой. Приложение не одобряет даже после того, как это может ударить и испытать ..
Динеш Рават

6

WKWebViewявляется заменой UIWebView. Если у вас нет UIWebViewиспользования в вашем коде, чем, выполнив приведенную ниже команду терминала, вы можете легко узнать, какая библиотека все еще используетUIWebView ссылку (не пропустите. (Точка)).

Из командной строки перейдите в заархивированное приложение, например

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

А потом беги

grep -r UIWebView

ИЛИ позвоните

 grep -r UIWebView /Path/To/Project/*

Это даст вам результат для соответствия фреймворка

./<ANY>.framework/Headers/ANY.h:#define ANYUseUIWebView ANY_NAME_PASTE(ANY_PREFIX_NAME, ANYUseUIWebView)

Вывод для соответствия библиотеке

Binary file ./<FRAMEWORK-NAME>.framework/<LIB-FILE>.a matches

Обновите эти библиотеки

pod update

также ознакомьтесь с этой статьей Medium


используйте "grep -r -F" UIWebView "." вместо "grep -r UIWebView"
Маниш

1
В Mac используйте grep -r UIWebView. в пути проекта (с пробелом и точкой в ​​конце)
Винс

Уже были обновлены все используемые UIWebViewмодули (например, AFNetworking, ZDCChat), а также проверены обновленные модули, поскольку они уже обновлены для WKWebView, но все еще grep -r UIWebView .дает мне тот же список модулей для UIWebViewсовпадений, а яблоко также выдает предупреждение при отправке приложения в iTunesconnect
Сунил

./Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h:#import "UIWebView+AFNetworking.h" Binary file ./Pods/ZDCChat/ZDCChatAPI.framework/ZDCChatAPI matches Binary file ./Pods/ZDCChat/ZDCChat.framework/ZDCChat matches Binary file ./Pods/.git/index matches
Сунил Тардж

ZDCChatAPIэта капсула используетuiwebview
Джавад Али


4
brew install ripgrep 
cd Pods
rg UIWebView
YoutubePlayer-in-WKWebView/README.md
10:- using WKWebView instead of UIWebView.

TTTAttributedLabel/TTTAttributedLabel/TTTAttributedLabel.h
166: to emulate the link detection behaviour of UIWebView.

TwitterKit/iOS/TwitterKit.framework/Headers/Twitter.h
28:     * either UIWebView or SFSafariViewController depending on iOS

TwitterKit/iOS/TwitterKit.framework/Headers/TWTRTweet.h
84: *  Suitable for loading in a `UIWebView`, `WKWebView` or passing to Safari:

3

Я решил эту проблему, обновив плагин ionic webview и добавив настройки в config.

Я выполнил следующие шаги:

1. плагин cordova rm cordova-plugin-ionic-webview

2. плагин cordova добавить cordova-plugin-ionic-webview @ latest

3.Добавлены настройки в конфигурационный файл для платформы ios:

<preference name="WKWebViewOnly" value="true" />
    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />

После выполнения этих шагов мое приложение будет отправлено и позже одобрено на рассмотрение.



2

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

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


2

Это был долгий процесс, но мне удалось решить вышеупомянутую проблему. Позвольте мне провести вас через процесс и поделиться своими выводами. Во-первых, не обязательно то, что сработало для меня, будет работать и для вас. Вам просто необходимо попробовать все возможные решения. Я следил за некоторыми решениями, опубликованными в разных темах. (Ссылка ниже).

  1. Когда я был на RN 0.59, я нашел здесь комментарий к этим файлам . Не сработало
  2. Перешел на RN 0.61, этих файлов не нашел. Я попытался загрузить приложение, но все равно получил предупреждение.Не сработало
  3. Я обновил следующие библиотеки до последних версий. Не сработало реагировать на родную информацию об устройстве, реагировать на собственное представление
  4. Я пробовал эту команду grep, упомянутую здесь . Были обнаружены определенные библиотеки, например, react-native-fbsdk, react-native-google-sign, react-native-gesture-handler. Поэтому я обновил их все и загрузил сборку, но все равно получил предупреждение. Не сработало

  5. Последнее средство - обновить все библиотеки, что, как я знаю, займет много времени. Так что мое первое предположение было обновление «реагировать-нативный-firebase» до последней версии v6 вопроса . Но у него были некоторые проблемы с отключением уведомления, поэтому я не мог его использовать. Также они упомянули, что их версия 5.5.6 является чистой и не имеет никаких UIWebViewIssues, учитывая, что вы обновили SDK iOS до 6.12. + Подробнее здесь . Это подтолкнуло меня ко второму предположению, которое в моем случае было «react-native-ux-cam». К счастью, они обновили свою библиотеку, удалив все ссылки на UIWebView. Я обновился до последней версии и БУМ, проблема решена. Я отправил свое приложение в Apple, и пока никаких предупреждений нет. Более подробная информация здесь Работала 💥

Надеюсь, это кому-то поможет.


2

Предыстория

В моем проекте ReactJS + Cordova я загрузил приложение в магазин приложений, и оно было успешным. Вскоре после того, как я получил письмо со ссылкой на ITMS-90809: Deprecated API Usage. После нескольких часов (более дней) исследований и нескольких неудачных загрузок я подключился к Apple, используя платный токен разработчика (50 долларов США); в основном они ответили: «Проверьте папку модулей узла» и вернули мой токен, потому что не собирались помогать мне с этой чрезвычайно неоднозначной ошибкой.

Предыдущие попытки

  • Обновленный Cordova использовать wkwebview-engineи wkwebviewxhrfixплагины
  • Используя grep -rархивы, исходный код ios и исходный код всего проекта, я нашел МНОГО заметок, но ничего особо не помогло.
  • обновил все npmпакеты
  • почистил и обновил все cocoapodстручки

Последняя попытка

После удаления всех "лишних" плагинов Cordova, пакетов npm и pod'ов я остался с оболочкой приложения, но все еще сталкивался с отказом от яблока. Используя grep -rснова, все еще была ссылка на "facebook", которая привела меня к старой копии FBSDK.

Решение

FBSDKбыли добавлены вручную в target > Build Phases > Link Binary With Libraries. Также был связанный cordovaFacebook.mв target > Build Phases > Compile Sources. После удаления этих старых, не обслуживаемых файлов я смог без проблем загрузить в itunes connect.


1

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

pod update 'Firebase/Auth'

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


Итак, это то, что я сделал, и, по-видимому, в нем говорится «Установка FirebaseInstanceID 4.2.5 (было 4.2.2) и не решает мою проблему»,
Жюль Ли

1

FB Sdk выше версии 7.16.1 имеет эту проблему. На самом деле у него нет файлов в папке framework.

Эта ошибка удаляется при сборке с использованием FBSDK v7.16.1, но Appstore отклонил приложение из-за устаревшего использования api (UIWebView).

Решаю с помощью FBSDK v7.19.2.

1) Когда вы создаете проект для xcode, он показывает ошибку упоминания, shareKit не найден. Я решил это, скопировав папку facebookSDK из папки framework моей предыдущей сборки (с fbsdk v7.16.1) в то же место текущей папки xcode (frameworks / FacebookSDK ....)

2) Затем откройте свой проект xcode, добавьте файлы из местоположения: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) в Frameworks в Xcode.

3) Добавьте «$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS» в пути поиска фреймворка в настройки сборки в Xcode.

4) Откройте проект в терминале: введите "grep -r" UIWebView ". , если это показывает какое-либо совпадение с UIWebView, удалите его, открыв файл.

5) Если он показывает совпадение в двоичном файле FBSDKCoreKit. Откройте файл в TextEdit на MAC и найдите и замените все «UIWebView» на «WKWebView».

6) Сохраните его и снова добавьте в Frameworks в Xcode. Создайте и отправьте в магазин приложений.


0

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

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

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

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

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


0

Я столкнулся с тем же самым для собственного приложения React. Проверьте следующие вещи:

1) Вы используете модуль response-native-webview, а не импортируете его напрямую из react-native (сообщество webview устарело как удаление бережливого ядра в v0.60 и будет удалено в следующем стабильном выпуске). ( проверьте здесь )

2) Также убедитесь, что вы используете какие-либо сторонние библиотеки, которые используют webview, в актуальном состоянии. Если нет, попросите разработчиков библиотеки обновить response-native-webview.

3) Вы готовы приступить к загрузке, пожалуйста, добавьте комментарии, если у кого-то возникнут дополнительные трудности.

Проверьте здесь критические изменения в v0.60

Другой способ избавиться от этого предупреждения: начните передавать useWebKit = {true}, то есть вы вообще используете WKWebView, а не UIWebView. Затем вы можете сделать следующее, чтобы решить проблему - Использование устаревшего API.

  1. Удалить библиотеки / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Удалите библиотеки / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Я уже успешно загрузил app.ipa в AppStore без каких-либо предупреждений о разрешении.

<WebView
 style={{flex: 1, backgroundColor: Colors.white}}
 useWebKit={true}
 startInLoadingState={true}
 source={{uri: 'my http url'}}
/>```

0

Если кто-то помогает, я запускаю pod updateтерминал, а затем снова архивирую. Это подходит для меня.


Это касается приложений для ios, но не работает для Android или других мобильных приложений.
Jacksonkr

Это специфическая проблема iOS, у Android нет такой проблемы
slothstronaut

0

Мне скрипты не помогли. Мне пришлось просто вручную просмотреть каждую структуру, просмотреть примечания к выпуску и обновить их.


0

Я избавляюсь от этого, выполнив следующие шаги:

Шаг 1:

Найдите «UIWebView» в каталоге проекта xcode

Шаг 2:

Щелкните правой кнопкой мыши (на RCTWebView.m) и выберите «Показать в навигаторе проекта».

Шаг 3:

Прокрутите вниз и удалите только следующие четыре файла:

 1. RCTWebView.h
 2. RCTWebView.m
 3. RCTWebViewManager.h
 4. RCTWebViewManager.m

Затем очистите проект и архив.

NB: если вы используете библиотеку response-native-community / response-native-webview, обновите ее до последней версии, иначе это будет сделано.



0

Чтобы найти, где вы используете UIWebView, перейдите в корень вашего проекта в терминале и используйте эту команду

grep -r -F "UIWebView" .

Символ '.' очень важно. Он сообщает системе, что нужно искать строку «UIWebView» в текущей папке и подпапках. Это также будет искать библиотеки cocoapods


0

Чтобы обновить WebView, устаревший в ios

Это успешно решило мою проблему

платформы cd / ios grep -r UIWebView Pods /

Откройте Podfile и добавьте / замените модуль AFNetworking как

pod 'AFNetworking', '~> 4.0'

Наконец, в обновлении терминального модуля

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.