ITMS-90809: Застосоване використання API - Apple припинить приймати подання програм, що використовують API UIWebView


91

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

ITMS-90809: Застосоване використання API - Apple припинить приймати подання програм, які використовують API UIWebView. Для отримання додаткової інформації див. Https://developer.apple.com/documentation/uikit/uiwebview .

Справа в тому, що я не використовую UIWebView у своєму додатку, тому я намагався оновити свої стручки, але все одно те ж саме. До речі, це моя 3-а збірка на 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.
Герхарбо

1
@Gerharbo Я використовую лише стручки Firebase, і я не можу знайти UIWebView всередині них.
Нік

Для тих, хто використовує cordova + responsejs (або angular), перевірте cordova-plugin-wkwebview-engine та cordova-plugin-wkwebviewxhrfix
Jacksonkr,

Відповіді:


102

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

Зайдіть з терміналом у папку проекту та виконайте команду: grep -r "UIWebView" .

Усі відповідні стручки повинні бути оновлені. Зараз я застряг, бо знайшов UIWebView в Google AdMob (версія 7.49.0) і чекаю нової версії від Google.


22
Коли я ввів команду в терміналі, я отримую таке попередження "grep: warning: рекурсивний пошук stdin" і воно не повертає жодної відповіді навіть через 30 хвилин.
Дурай Амутан. 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

14
@ 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, як я можу виправити, що кадр працює сам? Перш за все дякую за вашу відповідь ... після того, як ви відповіли на вашу відповідь, здається, у мене є 4 фреймворки, які використовують UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
Джонні,

2
@johnny, вам доведеться клонувати кожне сховище та з'ясувати, де вони використовують UIWebView, видалити або замінити код, який його використовує, і, можливо, надіслати запити на витяг, якщо ви хочете, щоб ваші зміни повернулися до основного сховища. Або ви можете просто почекати, поки супроводжувачі самі це виправлять. Як я вже згадував раніше, зараз Apple просто попереджає розробників про це, а насправді не відкидає двійкові файли, тож у вас є трохи часу, щоб почекати, поки майстри вищої версії виправлять ситуацію.
Рудедог,

9

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


Привіт, можете ви звернутися до якогось рішення, я теж стикаюся з такою ж проблемою. Додаток не схвалює навіть після того, як можуть потрапити і випробування ..
Дінеш Рават

6

WKWebViewє заміною UIWebView. Якщо у вас немає UIWebViewкоду у вашому коді, ніж виконанням наведеної нижче команди терміналу, ви можете легко дізнатися, яка бібліотека все ще використовує UIWebViewпосилання (не пропустіть. (Крапка)).

З командного рядка, cd до заархівованої програми, наприклад

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

також перегляньте цю статтю про засіб


використовуйте "grep -r -F" UIWebView "." istead "grep -r UIWebView"
Manish

1
У Mac використовуйте "grep -r UIWebView." у шляху проекту (з пробілом та точкою в кінці)
Вінс

Вже оновили всі стручки, які використовували UIWebView(наприклад, AFNetworking, ZDCChat), а також перевірили оновлені стручки, оскільки вони вже оновлені для WKWebView, але все ще grep -r UIWebView .видає мені той самий список стручків для UIWebViewзбігів, а Apple також попереджає під час надсилання програми на iTunesconnect
Sunil Targe

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


2

Якщо ви будуєте за допомогою Unity 3D , це проблема з інформацією (визнана в журналах змін), наразі вона виправлена ​​для версії 2019.3 (перевіряється та підтримується).

Перевірте квиток тут https://unity3d.com/unity/whats-new/2019.2.4


2

Передісторія

У своєму проекті ReactJS + Cordova я завантажив програму в магазин програм, і вона була успішною. Незабаром після того, як я отримав електронний лист із посиланням ITMS-90809: Deprecated API Usage. Після годин (протягом днів) досліджень та кількох невдалих завантажень я зв’язався з Apple за допомогою платного токена розробника (50 доларів США); вони відповіли, в основному, сказавши "перевірте папку модулів вузлів" і повернули мій токен, оскільки не збиралися допомагати мені з цією надзвичайно неоднозначною помилкою.

Попередні спроби

  • Оновлено Кордову для використання плагінів wkwebview-engineтаwkwebviewxhrfix
  • Використовуючи grep -rархіви, джерело ios та все джерело проекту, я знайшов БАГАТО нотаток, але нічого, що насправді допомогло.
  • оновив усі npmпакети
  • очистив та оновив усі cocoapodстручки

Остаточна спроба

Після видалення всіх «зайвих» плагінів cordova, пакетів npm та підсистем я залишився з оболонкою програми, але все ще стикався з відмовою від яблука. використовуючи grep -rзнову, все ще було посилання на "facebook", що привело мене до старої копії FBSDK.

Рішення

FBSDKбуло додано до target > Build Phases > Link Binary With Libraries. Був також асоційований cordovaFacebook.mв target > Build Phases > Compile Sources. Після видалення цих старих, необслуговуваних файлів я зміг завантажити на iTunes Connect, не маючи жодної проблеми.


2

Я вирішив цю проблему, оновивши плагін ionic webview та додавши налаштування у конфігурації.

Я виконав наступні кроки:

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

Після виконання цих кроків мій додаток надіслано та згодом схвалено на огляді.


1

У моєму випадку я Firebase/Authвикористовував застарілий API UIWebView, і версія, яку я використовував, була старішою. Тож я щойно оновив Firebase/Authстручок за допомогою команди,

pod update 'Firebase/Auth'

Примітка : Щоб зрозуміти фреймворки, які використовують цей api, просто знайдіть "UIWebView" ( cmd+ shift+ F)


Отже, це те, що я зробив, і, мабуть, там написано Встановлення FirebaseInstanceID 4.2.5 (було 4.2.2), і я не вирішив мою проблему
Jules Lee

1

Це був довгий процес, але мені вдалося вирішити вищезазначене питання. Дозвольте мені провести вас через процес і поділитися своїми висновками. Перш за все, не потрібно те, що працювало для мене, буде працювати і для вас. Вам потрібно випробувати всі можливі рішення, викладені там. Я дотримувався деяких рішень, розміщених у різних темах. (Посилання нижче).

  1. Коли я був на RN 0,59, я знайшов коментар до цих файлів, згаданий тут . Не працював
  2. Я перейшов на RN 0,61, я не знайшов цих файлів. Я спробував завантажити програму, але все одно отримав попередження. Не працював
  3. Я оновив наступні бібліотеки до їх останніх версій. Не спрацював response-native-device-info response-native-view
  4. Я спробував цю згадану тут команду grep . Були певні бібліотеки, які з’являлися, тобто реагувати-рідний-fbsdk, реагувати-рідний-google-знак, реагувати-рідний-обробник жестів. Тож я модернізував їх усіх і завантажив збірку, але все одно отримав попередження. Не працював

  5. Останній засіб оновити всі бібліотеки, що, як я знаю, забирало багато часу. Так що моє перше припущення було оновлення «реагувати-нативний-firebase» до останньої версії v6 питання . Але у нього були деякі проблеми з тим, що сповіщення не було включено, тому я не міг ним скористатися. Також вони згадали, що їх версія v.5.5.6 є чистою і не має жодних UIWebViewIssues, якщо ви оновите свій iOS sdk до 6.12. + Докладніше тут . Тож це підштовхнуло мене до мого другого припущення, яке в моєму випадку було „реагувати-рідним-ux-камерою”. На щастя, вони оновили свою бібліотеку, щоб видалити всі посилання на UIWebView. Я оновив останню версію та BOOM, проблема була вирішена. Я подав свою програму в Apple, і поки що жодних попереджень. Більше інформації тут Працював 💥

Сподіваюся, це комусь допомагає.


1

У FB Sdk вище версії 7.16.1 є ця проблема. Насправді у нього немає файлів у папці framework.

Видалення цієї помилки під час її створення за допомогою FBSDK v7.16.1, але Appstore відхилило програму через знецінене використання API (UIWebView).

Я вирішую це за допомогою FBSDK v7.19.2.

1) Коли ви створюєте проект для xcode, він відображає помилку згадування, shareKit не знайдено. Я вирішую це шляхом копіювання папки facebookSDK із папки фреймворка моєї попередньої збірки (з fbsdk v7.16.1) у те саме розташування поточної папки xcode (framework / FacebookSDK ....)

2) Потім відкрийте свій проект xcode, додайте файли з розташування: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) до Frameworks у Xcode.

3) Додайте "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" до Framework Search Path у налаштування збірки в Xcode.

4) Відкрийте проект у терміналі: введіть "grep -r" UIWebView "." , якщо це показує будь-яке збіг з UIWebView, видаліть його, відкривши файл.

5) Якщо в бінарному файлі FBSDKCoreKit відображається збіг. Відкрийте файл у TextEdit на MAC і знайдіть і замініть усі "UIWebView" на "WKWebView"

6) Збережіть його та знову додайте до Frameworks на Xcode. Створіть і натисніть на магазин додатків.


0

Коли ви створюєте додаток Ionic, ви можете вибрати між Cordova або Capacitor, щоб розгорнути рідну мобільну версію. Хоча новіші версії використовують WKWebView автоматично, Кордова все ще використовує API UIWebView відверто або містять посилання на них (конденсатор оновлено для видалення цих посилань - див. Нижче).

Після подання програми Apple шукає в коді програми рядок “UIWebView”, а потім генерує попередження про подання, якщо знайдено. Таким чином, буде необхідний майбутній випуск cordova-ios (бібліотека Cordova iOS), щоб забезпечити видалення всіх посилань на API UIWebView.

інша думка. Не знаю, чи це має сенс, чи це технічно можливо.

Також перемістіть UIWebView до плагіна та змусіть cordova-ios використовувати цей або деякі з плагінів WKWebView. cordova-ios просто містить код для завантаження веб-перегляду. За замовчуванням наступна версія повинна завантажувати Apache WKWebViewEngine (Плагін, встановлений за замовчуванням для нових програм, інструкція з міграції для старих програм). Користувачі, яким потрібен UIWebView, іонічний, вилка або інші, можуть вказати свій власний, як зараз.

Таким чином, жоден UIWebView не знаходитиметься в cordova-ios, і він все одно буде досить гнучким, як сьогодні.


0

Я зіткнувся з тим самим для рідної програми React. Перевірте нижче:

1) Ви використовуєте модуль response-native-webview, а не імпортуєте його безпосередньо з response-native (веб-перегляд спільноти застарілий як вилучення нежирного ядра у версії 0.60 і буде видалений у наступному стабільному випуску). ( перевірити тут )

2) Будь ласка, також переконайтеся, що ви використовуєте будь-які сторонні бібліотеки, які використовують веб-перегляд, чи оновлено. Якщо ні, то попросіть працівників бібліотек оновити систему 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 та іншим мобільним додаткам.
Джексонкр

Це специфічна проблема для 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

Щоб знайти, де ви використовуєте a UIWebView, перейдіть до кореня проекту в терміналі та скористайтеся цією командою

grep -r -F "UIWebView" .

«» дуже важливо. Він повідомляє системі пошук рядка "UIWebView" у поточній папці та підпапках. Це також буде шукати бібліотеки cocoapods

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.