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?
Odpowiedzi:
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.
źródło
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
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ńcd
do zarchiwizowanej aplikacji, np .:cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app
Tam użyj
nm
polecenia, 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ą.
źródło
UIWebView
, ale bardzo wątpię, czy nastąpi to przed wydaniem iOS 13 tej jesieni.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.
źródło
WKWebView
jest zamiennikiemUIWebView
. Jeśli nie maszUIWebView
zastosowania w swoim kodzie, to wykonując poniższe polecenie terminala, możesz łatwo dowiedzieć się, która biblioteka nadal używaUIWebView
odwoł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
sprawdź także ten artykuł Medium
źródło
UIWebView
Zaktualizował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 dlaUIWebView
dopasowań, a Apple również ostrzega podczas przesyłania aplikacji na 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
ten kapsuła używauiwebview
W przypadku projektu z cocoapods:
grep -r UIWebView Pods/
źródło
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:
źródło
Użyj najnowszej wersji Firebase
https://firebase.google.com/support/release-notes/ios
Wersja 6.8.1: Usunięto odniesienia do UIWebViewDelegate, aby zachować zgodność z ostrzeżeniem dotyczącym przesyłania do sklepu App Store (nr 3722).
źródło
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
źródło
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 cytatem
ITMS-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
wkwebview-engine
iwkwebviewxhrfix
grep -r
z archiwów, źródła iOS i całego źródła projektu, znalazłem DUŻO notatek, ale nic nie pomogło.npm
pakietycocoapod
strąkiOstatnia 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 plikuFBSDK
.Rozwiązanie
FBSDK
został ręcznie dodany dotarget > Build Phases > Link Binary With Libraries
. Był też powiązanycordovaFacebook.m
ztarget > Build Phases > Compile Sources
. Po usunięciu tych starych, nieobsługiwanych plików mogłem bez problemu przesłać do itunes connect.źródło
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.
źródło
W moim przypadku
Firebase/Auth
korzystałem z przestarzałego interfejsu API UIWebView, a wersja, której używałem, była starsza. Właśnie zaktualizowałemFirebase/Auth
kapsułę za pomocą poleceniapod update 'Firebase/Auth'
Uwaga : aby dowiedzieć się, jakie platformy używają tego interfejsu API, po prostu wyszukaj „UIWebView” (
cmd
+shift
+F
)źródło
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).
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ę
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.
źródło
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.
źródło
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.
źródło
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.
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'}} />```
źródło
Jeśli ktoś pomoże, uruchomię
pod update
na terminalu i ponownie zarchiwizuję. To działa dla mnie.źródło
Skrypty mi nie pomogły. Musiałem po prostu ręcznie przejrzeć każdy framework, spojrzeć na informacje o wersji i zaktualizować je.
źródło
Pozbywam się tego, wykonując poniższe kroki-
Krok 1:
Krok 2:
Krok 3:
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.
źródło
Powinieneś zainstalować tę wtyczkę Cordova:
https://github.com/apache/cordova-plugin-wkwebview-engine
Następnie dodaj
<preference name="WKWebViewOnly" value="true" />
swój config.xml w sekcji iOS.Następnie zwiększ wersję i prześlij ją ponownie.
źródło
Aby dowiedzieć się, gdzie używasz
UIWebView
, przejdź do katalogu głównego swojego projektu w terminalu i użyj tego poleceniagrep -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
źródło