ITMS-90809: Veraltete API-Verwendung - Apple akzeptiert keine Übermittlungen von Apps mehr, die UIWebView-APIs verwenden

91

Gestern habe ich meine App auf TestFlight hochgeladen und nach einer Weile hat Apple mir diese Warnung gesendet:

ITMS-90809: Veraltete API-Nutzung - Apple akzeptiert keine Einsendungen von Apps mehr, die UIWebView-APIs verwenden. Weitere Informationen finden Sie unter https://developer.apple.com/documentation/uikit/uiwebview .

Die Sache ist, dass ich UIWebView nicht in meiner App verwende, also habe ich versucht, meine Pods zu aktualisieren, aber immer noch das Gleiche. Übrigens ist dies mein dritter Build auf TestFlight und dies ist das erste Mal, dass Apple mir dies sendet. Irgendwelche Ideen?

Aktualisieren

Das sind meine Schoten:

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'

Update 2

Scheint, als hätte ich die Rahmenbedingungen für das Problem gefunden.

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

Muss ich jetzt auf Google warten, um sie zu reparieren und meine Pods zu aktualisieren?

Nick
quelle
Überprüfen Sie, welche Pods Sie verwenden und ob sie eine UIWebView verwenden. Zum Beispiel Banner-SDKs, aber Sie können auch andere SDKs überprüfen.
Gerharbo
1
@Gerharbo Ich verwende nur Firebase-Pods und kann UIWebView darin nicht finden.
Nick
Für diejenigen, die Cordova + Reactjs (oder Angular) verwenden, lesen Sie Cordova-Plugin-Wkwebview-Engine und Cordova-Plugin-Wkwebviewxhrfix
Jacksonkr

Antworten:

102

Überprüfen Sie, ob Sie in Ihrem Code die UIWebView-Klasse verwenden. Wenn ja, ersetzen Sie Ihre Implementierung durch WKWebView. Andernfalls müssen Sie Ihre Pods überprüfen.

Gehen Sie mit Terminal in Ihren Projektordner und führen Sie den folgenden Befehl aus: grep -r "UIWebView" .

Alle übereinstimmenden Pods müssen aktualisiert werden. Jetzt stecke ich fest, weil ich UIWebView in Google AdMob (Version 7.49.0) gefunden habe und auf eine neue Version von Google warte.

iNardex
quelle
22
Wenn ich den Befehl im Terminal eingebe, erhalte ich die folgende Warnung "grep: warning: rekursive Suche nach stdin" und es wird auch nach 30 Minuten keine Antwort zurückgegeben. Irgendwelche Ideen?
Durai Amuthan.H
1
Hat perfekt funktioniert. Ich habe dies verwendet, um herauszufinden, dass UnityAds.framework UIWebView verwendet. Sie müssen auf WKWebView aktualisiert werden.
Apollo SOFTWARE
1
Möglicherweise erhalten Sie das folgende Ergebnis. Die Binärdatei /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate stimmt überein. Ich habe es gelöst, indem ich meinen xcworkspace gelöscht und den Pod erneut installiert habe.
ShaoJen Chen
2
Bekommst du immer noch diesen @WilliamNardo? Obwohl ich nach der angeblichen Version aktualisiert habe , um das 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
Problem
14
@ DuraiAmuthan.H Überprüfen Sie, ob Sie den Punkt / Punkt (.) Am Ende des Befehls grep hinzugefügt haben. Ich habe anfangs den gleichen Fehler gemacht
Wheelie
68

Sie können jedes der Frameworks in der archivierten App untersuchen, um festzustellen, ob sich eines darauf bezieht UIWebView. Von der Befehlszeile cdbis zur archivierten App, z.

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

Verwenden Sie dort den nmBefehl, um die Symbole Ihrer App und jedes Frameworks der App zu sichern:

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

Dies wird Ihnen zumindest sagen, welcher Rahmen der Schuldige ist.

Rudedog
quelle
Vielen Dank für Ihre Antwort, es hat sehr geholfen. Ich werde meine Frage mit weiteren Informationen aktualisieren.
Nick
Jetzt kann ich nur noch darauf warten, dass Google die Probleme löst.
Nick
2
Ja, Sie müssen warten (oder sie selbst reparieren und eine Pull-Anfrage senden). Ich bin mir nicht sicher, bis wann genau alle Verwendungszwecke entfernt werden sollen UIWebView, aber ich bezweifle sehr, dass es noch vor der Veröffentlichung von iOS 13 im Herbst sein wird.
Rudedog
@Rudedog wie kann ich den Rahmen selbst reparieren? Zunächst einmal vielen Dank für Ihre Antwort ... Nachdem ich Ihrer Antwort gefolgt bin, scheint es, als hätte ich 4 Frameworks, die UIWebView verwenden >>>>>> Alamofire Cosmos NMSSH Stripe
Johnny
2
@johnny Sie müssten jedes Repository klonen und herausfinden, wo es UIWebView verwendet, den Code, der es verwendet, entfernen oder ersetzen und möglicherweise Pull-Anforderungen senden, wenn Ihre Änderungen wieder in das Haupt-Repository übernommen werden sollen. Oder Sie können einfach warten, bis die Betreuer das Problem selbst behoben haben. Wie ich bereits erwähnt habe, warnt Apple Entwickler nur davor und lehnt Binärdateien nicht ab. Sie haben also etwas Zeit, um darauf zu warten, dass die Upstream-Betreuer die Probleme beheben.
Rudedog
9

Ich werde meine eigene Frage beantworten, sobald ich Neuigkeiten zu dieser E-Mail habe. Google hat mir mitgeteilt, dass es zu diesem Problem mehrere Tickets gibt, die das Problem so schnell wie möglich beheben werden. Auch heute wurde meine App für den AppStore genehmigt, so dass es vorerst nur eine Warnung zu sein scheint.

Nick
quelle
Hallo, können Sie direkt zu einer Lösung gelangen, ich stehe auch vor dem gleichen Problem. App wird nicht genehmigt, auch nachdem dies möglicherweise Treffer und Versuche zur Folge hat.
Dinesh Rawat
6

WKWebViewist der Ersatz für UIWebView. Wenn Sie keinen UIWebViewCode verwenden, können Sie durch Ausführen des folgenden Terminalbefehls leicht feststellen, welche Bibliothek noch eine UIWebViewReferenz verwendet (verpassen Sie nicht den. (Punkt)).

Von der Befehlszeile aus CD zur archivierten App, z

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

Und dann rennen

grep -r UIWebView

ODER anrufen

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

Dadurch erhalten Sie eine Ausgabe für die Framework-Übereinstimmung

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

Ausgabe für Bibliotheksübereinstimmung

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

Aktualisieren Sie diese Bibliotheken

pod update

Schauen Sie sich auch diesen mittleren Artikel an

Jawad Ali
quelle
benutze "grep -r -F" UIWebView "." istead von "grep -r UIWebView"
Manish
1
Verwenden Sie auf dem Mac "grep -r UIWebView". im Projektpfad (mit Leerzeichen und Punkt am Ende)
Vins
Alle Pods, die verwendet wurden UIWebView(z. B. AFNetworking, ZDCChat), wurden bereits aktualisiert und aktualisierte Pods wurden überprüft, da sie bereits für WKWebView aktualisiert wurden. Außerdem grep -r UIWebView .wird mir die gleiche Pod-Liste für UIWebViewÜbereinstimmungen angezeigt, und Apple gibt beim Senden der App auf 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
Sunil Targe
ZDCChatAPIDieser Pod verwendetuiwebview
Jawad Ali
5

Für ein Projekt mit Cocoapods:

grep -r UIWebView Pods/ 
hstdt
quelle
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
quelle
2

Wenn Sie mit Unity 3D erstellen, handelt es sich um ein Wissensproblem (in Änderungsprotokollen anerkannt), das derzeit für Version 2019.3 behoben ist (getestet und zurückportiert).

Überprüfen Sie das Ticket hier https://unity3d.com/unity/whats-new/2019.2.4

Dalton Lima
quelle
2

Hintergrundgeschichte

In meinem ReactJS + Cordova-Projekt habe ich eine App in den App Store hochgeladen und sie war erfolgreich. Kurz darauf erhielt ich eine E-Mail mit Zitaten ITMS-90809: Deprecated API Usage. Nach stundenlangen (über Tage) Recherchen und mehreren fehlgeschlagenen Uploads habe ich mich mit einem kostenpflichtigen Entwicklertoken (50 US-Dollar) mit Apple verbunden. Sie antworteten im Grunde mit "Überprüfen Sie Ihren Knotenmodulordner" und erstatteten mein Token, weil sie mir bei diesem äußerst zweideutigen Fehler nicht helfen wollten.

Frühere Versuche

  • Cordova wurde aktualisiert, um die Plugins wkwebview-engineund zu verwendenwkwebviewxhrfix
  • Bei der Verwendung grep -rin Archiven, iOS-Quellen und der gesamten Projektquelle habe ich viele Notizen gefunden, aber nichts, was wirklich geholfen hätte.
  • Alle npmPakete aktualisiert
  • Alle cocoapodPods wurden gereinigt und aktualisiert

Letzter Versuch

Nachdem ich alle "zusätzlichen" Cordova-Plugins, npm-Pakete und Pods entfernt hatte, blieb mir eine Hülle einer Anwendung übrig, aber ich stand immer noch vor der Ablehnung des Apfels. Bei grep -rerneuter Verwendung gab es noch einen Verweis auf "Facebook", der mich zu einer alten Kopie des führte FBSDK.

Lösung

FBSDKwurde manuell hinzugefügt target > Build Phases > Link Binary With Libraries. Es gab auch eine cordovaFacebook.min target > Build Phases > Compile Sources. Nachdem ich diese alten, nicht gepflegten Dateien entfernt hatte, konnte ich sie ohne Probleme auf iTunes Connect hochladen.

Jacksonkr
quelle
2

Ich habe dieses Problem gelöst, indem ich das ionische Webview-Plugin aktualisiert und Einstellungen in der Konfiguration hinzugefügt habe.

Ich habe folgende Schritte ausgeführt:

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

2.Cordova Plugin Cordova-Plugin-Ionic-Webview @ neuesten hinzufügen

3.Einstellungen in der Konfigurationsdatei unter der iOS-Plattform hinzugefügt:

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

Nachdem ich diese Schritte ausgeführt habe, wird meine App gesendet und später in der Überprüfung genehmigt.

Munish Chechi
quelle
1

In meinem Fall Firebase/Authwurde die veraltete UIWebView-API verwendet, und die von mir verwendete Version war eine ältere. Also habe ich den Firebase/AuthPod mit dem Befehl aktualisiert.

pod update 'Firebase/Auth'

Hinweis : Um herauszufinden, welche Frameworks diese API verwenden, suchen Sie einfach nach "UIWebView" ( cmd+ shift+ F).

Ceekay
quelle
Das habe ich also getan und anscheinend steht darin, FirebaseInstanceID 4.2.5 zu installieren (war 4.2.2) und mein Problem nicht zu lösen
Jules Lee,
1

Es war ein langer Prozess, aber ich habe es geschafft, das oben genannte Problem zu lösen. Lassen Sie sich von mir durch den Prozess führen und meine Erkenntnisse mitteilen. Das Wichtigste zuerst, es ist nicht notwendig, was für mich funktioniert hat, wird für Sie funktionieren. Sie müssen jede mögliche Lösung ausprobieren, die es gibt. Ich habe einige der in verschiedenen Threads veröffentlichten Lösungen verfolgt. (Unten verlinkt).

  1. Als ich auf RN 0.59 war, fand ich diesen Dateikommentar hier erwähnt . Hat nicht funktioniert
  2. Ich habe ein Upgrade auf RN 0.61 durchgeführt und diese Dateien nicht gefunden. Ich habe versucht, die App hochzuladen, habe aber trotzdem die Warnung erhalten. Hat nicht funktioniert
  3. Ich habe die folgenden Bibliotheken auf die neuesten Versionen aktualisiert. Funktionierte nicht React-Native-Device-Info React-Native-View
  4. Ich habe diesen hier erwähnten grep-Befehl ausprobiert . Es gab bestimmte Bibliotheken, die angezeigt wurden, z. B. React-Native-FBSDK, React-Native-Google-Sign, React-Native-Gesten-Handler. Also habe ich alle aktualisiert und den Build hochgeladen, aber trotzdem die Warnung erhalten. Hat nicht funktioniert

  5. Der letzte Ausweg, um alle Bibliotheken zu aktualisieren, von dem ich weiß, dass er viel Zeit in Anspruch nehmen würde. Meine erste Vermutung war also, 'react-native-firebase' auf das neueste Problem der Version 6 zu aktualisieren . Es gab jedoch einige Probleme mit der Benachrichtigung, die nicht aktiviert war, sodass ich sie nicht verwenden konnte. Außerdem haben sie erwähnt, dass ihre Version 5.5.6 sauber ist und keine UIWebViewIssues enthält, vorausgesetzt, Sie aktualisieren Ihr iOS-SDK auf 6.12. + Weitere Informationen hier . Dies brachte mich zu meiner zweiten Vermutung, die in meinem Fall "React-Native-UX-Cam" war. Zum Glück haben sie ihre Bibliothek aktualisiert, um alle Referenzen von UIWebView zu entfernen. Ich habe auf die neueste Version und BOOM aktualisiert, das Problem wurde behoben. Ich habe meine App bei Apple eingereicht und bisher keine Warnungen. Mehr Infos hier Arbeitete 💥

Hoffe das hilft jemandem.

Zeerak Hameem
quelle
1

FB Sdk über Version 7.16.1 haben dieses Problem. Eigentlich hat es keine Dateien im Framework-Ordner.

Dieser Fehler wird behoben, wenn Sie ihn mit FBSDK v7.16.1 erstellen. Appstore hat die App jedoch aufgrund der veralteten API-Nutzung (UIWebView) abgelehnt.

Ich löse es mit FBSDK v7.19.2.

1) Wenn Sie das Projekt für xcode erstellen, wird der Erwähnungsfehler "shareKit nicht gefunden" angezeigt. Ich löse es, indem ich den facebookSDK-Ordner aus dem Framework-Ordner meines vorherigen Builds (mit fbsdk v7.16.1) an denselben Speicherort des aktuellen xcode-Ordners (Frameworks / FacebookSDK ....) kopiere.

2) Öffnen Sie dann Ihr Xcode-Projekt und fügen Sie Dateien vom Speicherort Frameworks / FacebookSDK / Plugins / IOS / (Sharekit, Corekit, Loginkit) zu Frameworks in Xcode hinzu.

3) Fügen Sie "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" zu den Framework-Suchpfaden in die Build-Einstellungen von Xcode ein.

4) Öffnen Sie das Projekt im Terminal: Geben Sie "grep -r" UIWebView "ein." Wenn dies eine Übereinstimmung mit UIWebView anzeigt, entfernen Sie diese durch Öffnen der Datei.

5) Wenn in einer Binärdatei von FBSDKCoreKit Übereinstimmung angezeigt wird. Öffnen Sie die Datei in TextEdit unter MAC und suchen und ersetzen Sie alle "UIWebView" in "WKWebView".

6) Speichern Sie es und fügen Sie es erneut zu Frameworks bei Xcode hinzu. Erstellen und an Appstore senden.

Aqib Ahmed
quelle
0

Wenn Sie eine Ionic-App erstellen, können Sie zwischen Cordova und Capacitor wählen, um eine native mobile Version bereitzustellen. Während neuere Versionen WKWebView automatisch verwenden, verwendet Cordova UIWebView-APIs weiterhin direkt oder enthält Verweise darauf (Capacitor wurde aktualisiert, um diese Verweise zu entfernen - siehe unten).

Bei der App-Übermittlung durchsucht Apple den App-Code nach der Zeichenfolge "UIWebView" und generiert dann eine Übermittlungswarnung, wenn sie gefunden wird. Daher ist eine zukünftige Version von cordova-ios (der Cordova iOS-Bibliothek) erforderlich, um sicherzustellen, dass alle Verweise auf UIWebView-APIs entfernt werden.

ein anderer Gedanke. Ich weiß nicht, ob es Sinn macht oder technisch möglich ist.

Verschieben Sie UIWebView ebenfalls in ein Plugin und lassen Sie cordova-ios dieses oder einige der WKWebView-Plugins verwenden. cordova-ios enthält nur den Code zum Laden einer Webansicht. Standardmäßig sollte die nächste Version die Apache WKWebViewEngine laden (Plugin standardmäßig auf neuen Apps installiert, Migrationsanweisung für alte Apps). Benutzer, die UIWebView, das Ionic, eine Gabel oder andere benötigen, können ihr eigenes so angeben, wie es jetzt ist.

Auf diese Weise wäre kein UIWebView in Cordova-iOS und es wäre immer noch flexibel genug wie heute.

Expertenvorschlag
quelle
0

Dasselbe sah ich für die native React-App. Überprüfen Sie die folgenden Dinge:

1) Sie verwenden das React-Native-Webview-Modul, anstatt es direkt aus React-Native zu importieren (Community-Webview wird in Version 0.60 als Lean-Core-Entfernung veraltet und in der nächsten stabilen Version entfernt). ( hier überprüfen )

2) Bitte überprüfen Sie auch, ob Sie Bibliotheken von Drittanbietern verwenden, die Webview verwenden. Wenn nicht, bitten Sie die Bibliotheksbetreuer, die React-Native-Webview zu aktualisieren.

3) Sie können den Upload durchführen. Bitte fügen Sie Kommentare hinzu, wenn jemand weitere Schwierigkeiten hat.

Überprüfen Sie hier die wichtigsten Änderungen in Version 0.60

Eine andere Möglichkeit, diese Warnung zu entfernen, besteht darin, useWebKit = {true} zu übergeben, dh, Sie verwenden WKWebView und nicht UIWebView. Anschließend können Sie das Problem wie folgt beheben: Veraltete API-Verwendung.

  1. Entfernen Sie Libraries / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Entfernen Sie Libraries / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Jetzt habe ich app.ipa bereits ohne Berechtigungswarnungen erfolgreich in AppStore hochgeladen.

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

Wenn jemand hilft, laufe ich pod updateauf dem Terminal und archiviere dann erneut. Das ist für mich in Ordnung.

Alfredo Luco G.
quelle
Das deckt iOS-Apps ab, hilft aber nicht Android oder anderen mobilen Apps.
Jacksonkr
Dies ist ein iOS-spezifisches Problem, Android hat nicht das gleiche Problem
Eduardo
0

Für mich haben Skripte nicht geholfen. Ich musste einfach jedes Framework manuell durchgehen, mir die Versionshinweise ansehen und sie aktualisieren.

green0range
quelle
0

Ich werde davon befreit, indem ich die folgenden Schritte befolge:

Schritt 1:

Suchen Sie im xcode-Projektverzeichnis nach „UIWebView“

Schritt 2:

Klicken Sie mit der rechten Maustaste (auf RCTWebView.m) und wählen Sie "Im Projektnavigator anzeigen".

Schritt 3:

Scrollen Sie nach unten und löschen Sie nur die folgenden vier Dateien:

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

Bereinigen Sie dann das Projekt und das Archiv.

NB: Wenn Sie die Bibliothek " React-Native-Community / React-Native-Webview" verwenden, aktualisieren Sie mit der neuesten Version, andernfalls ist dies erledigt.

Ali Hasan
quelle
0

Um herauszufinden, wo Sie a verwenden UIWebView, gehen Sie zu Ihrem Projektstamm im Terminal und verwenden Sie diesen Befehl

grep -r -F "UIWebView" .

Das '.' ist sehr wichtig. Es weist das System an, die Zeichenfolge "UIWebView" im aktuellen Ordner und in den Unterordnern zu durchsuchen . Dadurch werden auch die Cocoapods- Bibliotheken durchsucht

Amal TS
quelle