ITMS-90809: wycofane użycie interfejsu API - firma Apple przestanie akceptować zgłoszenia aplikacji korzystających z interfejsów API UIWebView

91

Wczoraj wgrałem swoją aplikację do TestFlight i po chwili Apple wysłało mi to ostrzeżenie:

ITMS-90809: wycofane użycie interfejsu API - firma Apple przestanie akceptować zgłoszenia aplikacji korzystających z interfejsów API UIWebView. Więcej informacji można znaleźć pod adresem https://developer.apple.com/documentation/uikit/uiwebview .

Chodzi o to, że nie używam UIWebView w mojej aplikacji, więc próbowałem zaktualizować moje pody, ale nadal to samo.To jest moja trzecia kompilacja na TestFlight i to jest pierwszy raz, kiedy Apple wysyła mi to. Jakieś pomysły?

Aktualizacja

Oto moje strąki:

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'

Zaktualizuj 2

Wygląda na to, że znalazłem ramy z problemem.

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

Czy teraz muszę czekać, aż Google je naprawi i zaktualizuje moje pody?

Nacięcie
źródło
Sprawdź, jakich podów używasz i czy używają one UIWebView. Na przykład banerowe SDK, ale warto też sprawdzić inne pakiety SDK.
Gerharbo
1
@Gerharbo Używam tylko podów Firebase i nie mogę znaleźć w nich UIWebView.
Nick
Dla tych, którzy używają cordova + reagjs (lub angular), wypróbuj cordova-plugin-wkwebview-engine i cordova-plugin-wkwebviewxhrfix
Jacksonkr

Odpowiedzi:

102

Sprawdź, czy używasz w swoim kodzie klasy UIWebView; jeśli tak, zamień swoją implementację na WKWebView, w przeciwnym razie sprawdź swoje Pods.

Przejdź z terminalem do folderu projektu i wykonaj polecenie: grep -r "UIWebView" .

Wszystkie dopasowane pody muszą zostać zaktualizowane. Teraz utknąłem, ponieważ znalazłem UIWebView w Google AdMob (wersja 7.49.0) i czekam na nową wersję od Google.

iNardex
źródło
22
Kiedy wpisałem polecenie w terminalu, otrzymuję ostrzeżenie „grep: warning: recursive search of stdin” i nie zwraca żadnej odpowiedzi nawet po 30 minutach. Jakieś pomysły?
Durai Amuthan.H
1
Działał doskonale. Wykorzystałem to, aby dowiedzieć się, że UnityAds.framework używa UIWebView. Muszą zaktualizować do WKWebView.
OPROGRAMOWANIE Apollo
1
Może uzyskasz wynik jak poniżej .. Plik binarny /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate pasuje. Rozwiązałem to, usuwając mój xcworkspace i ponownie instalując pod.
ShaoJen Chen
2
Czy nadal masz to @WilliamNardo? Mimo że zaktualizowałem poprzednią wersję, aby to naprawić: „ 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)nadal otrzymujęBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169
14
@ DuraiAmuthan.H sprawdź, czy dodałeś kropkę / kropkę (.) Na końcu polecenia grep. Początkowo popełniłem ten sam błąd
Wheelie
68

Możesz sprawdzić każdy z frameworków w zarchiwizowanej aplikacji, aby sprawdzić, czy któryś z nich odnosi się do UIWebView. Z wiersza poleceń cddo zarchiwizowanej aplikacji, np .:

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

Tam użyj nmpolecenia, aby zrzucić symbole aplikacji i każdej struktury aplikacji:

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

To przynajmniej powie ci, który framework jest winowajcą.

Rudedog
źródło
Dziękuję za odpowiedź, bardzo pomogła. Zaktualizuję moje pytanie o dalsze informacje.
Nick
Więc teraz jedyne, co mogę zrobić, to poczekać, aż Google rozwiąże problemy?
Nick
2
Tak, musisz poczekać (lub naprawić je samodzielnie i przesłać żądanie ściągnięcia). Nie jestem pewien, jaki jest dokładny termin usunięcia wszystkich zastosowań UIWebView, ale bardzo wątpię, czy nastąpi to przed wydaniem iOS 13 tej jesieni.
Rudedog
@Rudedog Jak mogę naprawić ramkę działa samodzielnie? Przede wszystkim dziękuję za odpowiedź ... po wykonaniu twojej odpowiedzi wydaje się, że mam 4 frameworki, które używają UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny
2
@johnny musiałbyś sklonować każde repozytorium i dowiedzieć się, gdzie używają UIWebView, usunąć lub zamienić kod, który go używa, i ewentualnie przesłać żądania ściągnięcia, jeśli chcesz, aby zmiany wróciły do ​​głównego repozytorium. Możesz też po prostu poczekać, aż opiekunowie sami to naprawią. Jak wspomniałem wcześniej, w tej chwili Apple tylko ostrzega programistów o tym i nie odrzuca plików binarnych, więc masz trochę czasu, aby poczekać, aż opiekunowie zewnętrzni naprawią rzeczy.
Rudedog
9

Odpowiem na własne pytanie, ponieważ mam wiadomości dotyczące tego e-maila. Google poinformował mnie, że jest kilka zgłoszeń dotyczących tego problemu i zamierzają rozwiązać ten problem tak szybko, jak to możliwe. Również dzisiaj moja aplikacja została zatwierdzona do AppStore, więc na razie wydaje się to tylko ostrzeżeniem.

Nacięcie
źródło
Cześć, czy możesz skierować do jakiegoś rozwiązania, ja też mam ten sam problem. Aplikacja nie jest akceptowana nawet po tak trafieniu i próbach ..
Dinesh Rawat
6

WKWebViewjest zamiennikiem UIWebView. Jeśli nie masz UIWebViewzastosowania w swoim kodzie, to wykonując poniższe polecenie terminala, możesz łatwo dowiedzieć się, która biblioteka nadal używa UIWebViewodwołania (nie przegap. (Kropki)).

Z linii poleceń cd do zarchiwizowanej aplikacji, np

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

A potem Run

grep -r UIWebView

LUB zadzwoń

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

To da ci wyjście do dopasowania struktury

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

Dane wyjściowe do dopasowania biblioteki

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

Zaktualizuj te biblioteki

pod update

sprawdź także ten artykuł Medium

Jawad Ali
źródło
użyj "grep -r -F" UIWebView "." istead of „grep -r UIWebView”
Manish
1
Na Macu użyj „grep -r UIWebView”. w ścieżce projektu (ze spacją i punktem na końcu)
Vins
UIWebViewZaktualizowałem już wszystkie pody, z których korzystały (np. AFNetworking, ZDCChat), a także sprawdziłem zaktualizowane pody, ponieważ są już zaktualizowane pod kątem WKWebView, ale nadal wyświetla tę grep -r UIWebView .samą listę podów dla UIWebViewdopasowań, a Apple również ostrzega podczas przesyłania aplikacji na iTunesconnect
Sunil
./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
Sunil Targe
ZDCChatAPIten kapsuła używauiwebview
Jawad Ali
5

W przypadku projektu z cocoapods:

grep -r UIWebView Pods/ 
hstdt
źródło
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:
Svitlana
źródło
2

Jeśli tworzysz za pomocą Unity 3D , jest to problem z wiedzą (potwierdzony w dziennikach zmian), obecnie został rozwiązany w wersji 2019.3 (w trakcie testów i backportowania).

Sprawdź bilet tutaj https://unity3d.com/unity/whats-new/2019.2.4

Dalton Lima
źródło
2

Backstory

W moim projekcie ReactJS + Cordova wgrałem aplikację do sklepu z aplikacjami i wszystko się udało. Wkrótce po otrzymaniu e-maila z cytatemITMS-90809: Deprecated API Usage . Po godzinach (dni) poszukiwań i wielu nieudanych przesyłaniach połączyłem się z Apple za pomocą płatnego tokena programisty (50 USD); odpowiedzieli po prostu mówiąc „sprawdź folder modułów węzłów” i zwrócili mój token, ponieważ nie zamierzali mi pomóc z tym niezwykle niejednoznacznym błędem.

Poprzednie próby

  • Zaktualizowano Cordova, aby używać wtyczek wkwebview-engineiwkwebviewxhrfix
  • Korzystając grep -rz archiwów, źródła iOS i całego źródła projektu, znalazłem DUŻO notatek, ale nic nie pomogło.
  • zaktualizował wszystkie npmpakiety
  • wyczyszczone i zaktualizowane wszystko cocoapod strąki

Ostatnia próba

Po usunięciu wszystkich "dodatkowych" wtyczek cordova, pakietów npm i podów, zostałem z powłoką aplikacji, ale wciąż w obliczu odrzucenia Apple. za pomocągrep -r ponownie, wciąż było odniesienie do „facebooka”, które doprowadziło mnie do starej kopii pliku FBSDK.

Rozwiązanie

FBSDKzostał ręcznie dodany do target > Build Phases > Link Binary With Libraries. Był też powiązany cordovaFacebook.mz target > Build Phases > Compile Sources. Po usunięciu tych starych, nieobsługiwanych plików mogłem bez problemu przesłać do itunes connect.

Jacksonkr
źródło
2

Rozwiązałem ten problem, aktualizując wtyczkę ionic webview i dodając preferencje w config.

Wykonałem następujące kroki:

1. wtyczka Cordova rm cordova-plugin-ionic-webview

2. wtyczka cordova dodaj cordova-plugin-ionic-webview @ latest

3.Dodano preferencje w pliku konfiguracyjnym na platformie ios:

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

Po wykonaniu tych czynności moja aplikacja zostanie przesłana, a następnie zatwierdzona do sprawdzenia.

Munish Chechi
źródło
1

W moim przypadku Firebase/Authkorzystałem z przestarzałego interfejsu API UIWebView, a wersja, której używałem, była starsza. Właśnie zaktualizowałem Firebase/Authkapsułę za pomocą polecenia

pod update 'Firebase/Auth'

Uwaga : aby dowiedzieć się, jakie platformy używają tego interfejsu API, po prostu wyszukaj „UIWebView” ( cmd+ shift+ F)

ceekay
źródło
Więc to jest to, co zrobiłem i najwyraźniej mówi Installing FirebaseInstanceID 4.2.5 (było 4.2.2) i nie rozwiązało mojego problemu
Jules Lee
1

To był długi proces, ale udało mi się rozwiązać powyższy problem. Pozwól, że przeprowadzę Cię przez ten proces i podzielę się moimi odkryciami. Po pierwsze, nie jest konieczne, co zadziałało dla mnie, będzie działać dla ciebie. Musicie wypróbować każde możliwe rozwiązanie. Śledziłem niektóre rozwiązania zamieszczone w różnych wątkach. (Link poniżej).

  1. Kiedy byłem na RN 0.59, znalazłem wspomniany tutaj komentarz do plików . Nie udało się
  2. Zaktualizowałem do RN 0.61, nie znalazłem tych plików. Próbowałem przesłać aplikację, ale nadal otrzymałem ostrzeżenie. Nie udało się
  3. Zaktualizowałem następujące biblioteki do ich najnowszych wersji. Nie zadziałało reagowanie-natywne-informacje o urządzeniu po reagowaniu na widok natywny
  4. Wypróbowałem to polecenie grep wymienione tutaj . Pojawiły się pewne biblioteki, np. Reaguj-natywne-fbsdk, reaguj-natywne-znak-google, program obsługi-natywnych-gestów. Więc zaktualizowałem je wszystkie i załadowałem kompilację, ale nadal otrzymałem ostrzeżenie. Nie udało się

  5. Ostatnia szansa na zaktualizowanie wszystkich bibliotek, co, jak wiem, zajmie dużo czasu. Tak więc moje pierwsze przypuszczenie było aktualizacji „reagować-native Firebase” do najnowszej wersji v6 problemu . Ale miał pewne problemy z brakiem powiadomienia, więc nie mogłem go użyć. Wspomnieli również, że ich wersja 5.5.6 jest czysta i nie ma żadnych UIWebViewIssues, biorąc pod uwagę, że zaktualizujesz pakiet SDK iOS do wersji 6.12. + Więcej informacji tutaj . Więc to przeniosło mnie do mojego drugiego przypuszczenia, które w moim przypadku brzmiało „reakcja-native-ux-cam”. Na szczęście zaktualizowali swoją bibliotekę, aby usunąć wszystkie odwołania do UIWebView. Zaktualizowałem do najnowszej wersji i BOOM, problem został rozwiązany. Przesłałem moją aplikację do Apple i jak dotąd nie mam żadnych ostrzeżeń. Więcej informacji tutaj Pracowałem 💥

Mam nadzieję, że to komuś pomoże.

Zeerak Hameem
źródło
1

FB Sdk powyżej wersji 7.16.1 ma ten problem. W rzeczywistości nie ma plików w folderze framework.

Ten błąd jest usuwany, gdy tworzysz go przy użyciu FBSDK 7.16.1, ale Appstore został odrzucony z powodu użycia przestarzałego interfejsu API (UIWebView).

Rozwiązuję to za pomocą FBSDK w wersji 7.19.2.

1) Kiedy budujesz projekt dla xcode, wyświetla się błąd wzmianki, nie znaleziono shareKit. Rozwiązuję to, kopiując folder facebookSDK z folderu framework mojej poprzedniej kompilacji (z fbsdk v7.16.1) do tej samej lokalizacji bieżącego folderu xcode (frameworks / FacebookSDK ...)

2) Następnie otwórz projekt xcode, dodaj pliki z lokalizacji: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) do Frameworks w Xcode.

3) Dodaj „$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS” do ścieżek wyszukiwania struktury w ustawieniach kompilacji w Xcode.

4) Otwórz projekt w terminalu: wpisz "grep -r" UIWebView "." , jeśli to pokazuje jakiekolwiek dopasowanie z UIWebView, usuń je, otwierając plik.

5) Jeśli pokazuje dopasowanie w pliku binarnym FBSDKCoreKit. Otwórz plik w TextEdit pod MAC i znajdź i zamień wszystkie „UIWebView” na „WKWebView”

6) Zapisz go i ponownie dodaj do ram w Xcode. Twórz i wysyłaj do Appstore.

Aqib Ahmed
źródło
0

Kiedy tworzysz aplikację Ionic, możesz wybrać między Cordova lub Capacitor, aby wdrożyć natywną wersję mobilną. Podczas gdy nowsze wersje automatycznie używają WKWebView, Cordova nadal bezpośrednio używa interfejsów API UIWebView lub zawiera odniesienia do nich (zaktualizowano Kondensator, aby usunąć te odniesienia - patrz poniżej).

Po przesłaniu aplikacji Apple wyszukuje w kodzie aplikacji ciąg „UIWebView”, a następnie generuje ostrzeżenie, jeśli zostanie znaleziony. W związku z tym przyszłe wydanie cordova-ios (biblioteka Cordova iOS) będzie wymagane, aby upewnić się, że wszystkie odwołania do interfejsów API UIWebView zostały usunięte.

inna myśl. Nie wiem, czy to ma sens, czy jest technicznie możliwe.

Przenieś UIWebView również do wtyczki i spraw, aby cordova-ios używał tej lub niektórych wtyczek WKWebView. cordova-ios zawiera tylko kod do załadowania widoku internetowego. Domyślnie następna wersja powinna załadować Apache WKWebViewEngine (wtyczka instalowana domyślnie w nowych aplikacjach, instrukcja migracji dla starych aplikacji). Użytkownicy, którzy potrzebują UIWebView, Ionic, fork lub inne, mogą określić swój własny, tak jak jest teraz.

W ten sposób żaden UIWebView nie byłby w cordova-ios i nadal byłby wystarczająco elastyczny, jak dzisiaj.

Sugestia eksperta
źródło
0

To samo spotkałem się z natywną aplikacją React. Sprawdź poniższe rzeczy:

1) Używasz modułu react-native-webview zamiast importować go bezpośrednio z react-native (webview społeczności jest przestarzałe jako usuwanie Lean Core w wersji 0.60 i zostanie usunięte w następnej stabilnej wersji). ( sprawdź tutaj )

2) Proszę również sprawdzić, czy jakiekolwiek biblioteki innych firm, które używają webview, są aktualne. Jeśli nie, poproś ich opiekunów o aktualizację react-native-webview.

3) możesz przejść do przesyłania, dodaj komentarze, jeśli ktoś napotka więcej trudności.

Sprawdź tutaj najważniejsze zmiany w wersji 0.60

Innym sposobem pozbycia się tego ostrzeżenia jest: zacznij przekazywać useWebKit = {true}, to znaczy, że w ogóle używasz WKWebView, a nie UIWebView. Następnie możesz wykonać następujące czynności, aby rozwiązać problem - użycie wycofanego interfejsu API.

  1. Usuń biblioteki / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Usuń biblioteki / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Teraz pomyślnie przesłałem app.ipa do AppStore bez żadnych ostrzeżeń o uprawnieniach.

<WebView
 style={{flex: 1, backgroundColor: Colors.white}}
 useWebKit={true}
 startInLoadingState={true}
 source={{uri: 'my http url'}}
/>```
Shashank Malviya
źródło
0

Jeśli ktoś pomoże, uruchomię pod updatena terminalu i ponownie zarchiwizuję. To działa dla mnie.

Alfredo Luco G.
źródło
Dotyczy to aplikacji na iOS, ale nie pomaga na Androida ani inne aplikacje mobilne.
Jacksonkr
To jest problem specyficzny dla iOS, Android nie ma tego samego problemu
slothstronaut
0

Skrypty mi nie pomogły. Musiałem po prostu ręcznie przejrzeć każdy framework, spojrzeć na informacje o wersji i zaktualizować je.

green0range
źródło
0

Pozbywam się tego, wykonując poniższe kroki-

Krok 1:

Wyszukaj „UIWebView” w katalogu projektu xcode

Krok 2:

Kliknij prawym przyciskiem myszy (na RCTWebView.m) i wybierz „Pokaż w nawigatorze projektu”

Krok 3:

Przewiń w dół i usuń tylko następujące cztery pliki:

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

Następnie wyczyść projekt i archiwum.

Uwaga: jeśli korzystasz z biblioteki „act-native-community / interact-native-webview”, zaktualizuj ją do najnowszej wersji, w przeciwnym razie jest to zrobione.

Ali Hasan
źródło
0

Aby dowiedzieć się, gdzie używasz UIWebView, przejdź do katalogu głównego swojego projektu w terminalu i użyj tego polecenia

grep -r -F "UIWebView" .

„” to bardzo ważne. Mówi systemowi, aby przeszukał ciąg „UIWebView” w bieżącym folderze i podfolderach. Spowoduje to również przeszukanie bibliotek cocoapods

Amal TS
źródło