ITMS-90809: utilizzo API obsoleto: Apple non accetterà più invii di app che utilizzano API UIWebView


91

Ieri ho caricato la mia app su TestFlight e dopo un po 'Apple mi ha inviato questo avviso:

ITMS-90809: utilizzo API obsoleto: Apple non accetterà più invii di app che utilizzano API UIWebView. Vedi https://developer.apple.com/documentation/uikit/uiwebview per maggiori informazioni.

Il fatto è che non uso UIWebView nella mia app, quindi ho provato ad aggiornare i miei pod ma sempre la stessa cosa. A proposito, questa è la mia terza build su TestFlight e questa è la prima volta che Apple me lo invia. Qualche idea?

Aggiornare

Questi sono i miei baccelli:

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'

Aggiorna 2

Sembra che ho trovato i framework con il problema.

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

Quindi ora devo aspettare che Google li risolva e aggiorni i miei pod?


Controlla quali pod stai utilizzando e se usano un UIWebView. Ad esempio, banner SDK, ma potresti voler controllare anche altri SDK.
Gerharbo

1
@ Gerharbo Uso solo i pod Firebase e non riesco a trovare UIWebView al loro interno.
Nick

Per coloro che utilizzano cordova + reactjs (o angular) controlla cordova-plugin-wkwebview-engine e cordova-plugin-wkwebviewxhrfix
Jacksonkr

Risposte:


104

Controlla se usi nel tuo codice la classe UIWebView; se sì, sostituisci la tua implementazione con WKWebView, altrimenti devi controllare i tuoi pod.

Vai con il terminale nella cartella del tuo progetto ed esegui il comando: grep -r "UIWebView" .

Tutti i pod corrispondenti devono essere aggiornati. Ora sono bloccato perché ho trovato UIWebView in Google AdMob (versione 7.49.0) e sto aspettando una nuova versione da Google.


23
Quando ho inserito il comando nel terminale, ricevo il seguente avviso "grep: warning: ricerca ricorsiva di stdin" e non restituisce alcuna risposta anche dopo 30 minuti. Qualche idea?
Durai Amuthan.H

1
Ha funzionato perfettamente. L'ho usato per scoprire che UnityAds.framework sta usando UIWebView. Devono aggiornarsi a WKWebView.
Apollo SOFTWARE

1
Forse otterrai risultati come di seguito .. Il file binario /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate corrisponde. L'ho risolto eliminando il mio xcworkspace e installando nuovamente il pod.
ShaoJen Chen

2
Hai ancora questo @WilliamNardo? Anche se ho aggiornato oltre la presunta versione per risolverlo: " 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), ricevo ancoraBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169

17
@ DuraiAmuthan.H controlla di aver aggiunto il punto / punto (.) Alla fine del comando grep. Inizialmente ho fatto lo stesso errore
Wheelie

68

È possibile esaminare ciascuno dei framework nell'app archiviata per vedere se qualcuno di essi fa riferimento UIWebView. Dalla riga di comando, cdall'app archiviata, ad esempio:

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

Una volta lì, usa il nmcomando per scaricare i simboli della tua app e di ciascuno dei framework dell'app:

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

Questo ti dirà almeno quale framework è il colpevole.


Grazie per la tua risposta, ha aiutato molto. Aggiornerò la mia domanda con ulteriori informazioni.
Nick

Quindi ora l'unica cosa che posso fare è aspettare che Google risolva i problemi?
Nick

2
Sì, dovrai attendere (o risolverli da solo e inviare una richiesta pull). Non sono sicuro di quale sia la scadenza esatta per rimuovere tutti gli usi UIWebView, ma dubito fortemente che lo sarà prima che iOS 13 venga rilasciato questo autunno.
Rudedog

@Rudedog come posso riparare il telaio funziona da solo? Prima di tutto grazie per la tua risposta ... dopo aver seguito la tua risposta sembra che io abbia 4 framework che utilizzano UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny

2
@johnny dovresti clonare ogni repository e scoprire dove usano UIWebView, rimuovere o sostituire il codice che lo utilizza ed eventualmente inviare richieste pull se vuoi che le tue modifiche tornino nel repository principale. Oppure, potresti semplicemente aspettare che i manutentori risolvano il problema da soli. Come ho detto prima, in questo momento Apple sta solo avvertendo gli sviluppatori di questo e in realtà non rifiuta i binari, quindi hai un po 'di tempo per aspettare che i manutentori a monte sistemino le cose.
Rudedog

9

Risponderò alla mia domanda poiché ho notizie su questa email. Google mi ha detto che ci sono diversi ticket su questo problema e risolveranno il problema il prima possibile. Anche oggi la mia app è stata approvata per l'AppStore quindi sembra essere solo un avvertimento per il momento.


Ciao, puoi indirizzare a qualche soluzione, anch'io sto affrontando lo stesso problema. L'app non sta approvando anche dopo, quindi potrebbe essere colpito e prove ..
Dinesh Rawat

6

WKWebViewè il sostituto di UIWebView. Se non hai un UIWebViewutilizzo nel tuo codice che eseguendo il seguente comando da terminale, puoi facilmente sapere che quale libreria sta ancora usando il UIWebViewriferimento (non perdere il. (Punto)).

Dalla riga di comando, accedi all'app archiviata, ad es

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

E poi Corri

grep -r UIWebView

O chiama

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

Questo ti darà l'output per la corrispondenza del framework

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

Output per la corrispondenza della libreria

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

Aggiorna queste librerie

pod update

dai un'occhiata anche a questo articolo medio


usa "grep -r -F" UIWebView "." invece di "grep -r UIWebView"
Manish

1
In Mac usa "grep -r UIWebView". nel percorso del progetto (con spazio e punto alla fine)
Vins

UIWebViewHo già aggiornato tutti i pod che utilizzavano (ad esempio AFNetworking, ZDCChat) e controllato anche i pod aggiornati poiché sono già aggiornati per WKWebView, ma grep -r UIWebView .mi dà ancora lo stesso elenco di pod per le UIWebViewpartite e Apple fornisce anche un avviso durante l'invio dell'app su 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

ZDCChatAPIquesto pod utilizzauiwebview
Jawad Ali

6

Per progetto con cocoapods:

grep -r UIWebView Pods/ 

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

Ho risolto questo problema aggiornando il plugin ionic webview e aggiungendo le preferenze in config.

Ho seguito i seguenti passaggi:

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

2.cordova plugin aggiungi cordova-plugin-ionic-webview @ latest

3.Preferenze aggiunte nel file di configurazione sulla piattaforma ios:

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

Dopo aver seguito questi passaggi, la mia app viene inviata e successivamente approvata in revisione.




2

È stato un processo lungo, ma sono riuscito a risolvere il problema sopra menzionato. Lascia che ti guidi attraverso il processo e condivida le mie scoperte. Per prima cosa, non è necessario ciò che ha funzionato per me funzionerà per te. Devi solo provare ogni possibile soluzione messa là fuori. Ho seguito alcune delle soluzioni pubblicate in vari thread. (Collegato di seguito).

  1. Quando ero su RN 0.59, ho trovato questi commenti sui file menzionati qui . Non ha funzionato
  2. Ho aggiornato a RN 0.61, non ho trovato questi file. Ho provato a caricare l'app ma ho comunque ricevuto l'avviso. Non ha funzionato
  3. Ho aggiornato le seguenti librerie alle loro ultime versioni. Non ha funzionato reatt-native-device-info react-native-view
  4. Ho provato questo comando grep menzionato qui . C'erano alcune librerie che si presentavano, ad es. React-native-fbsdk, react-native-google-sign, react-native-gesture-handler. Quindi li ho aggiornati tutti e ho caricato la build, ma ho comunque ricevuto l'avviso. Non ha funzionato

  5. L'ultima risorsa per aggiornare tutte le librerie, cosa che so avrebbe richiesto molto tempo. Così la mia prima ipotesi era di aggiornamento 'reagire-native-Firebase' alla versione più recente V6 problema . Ma aveva alcuni problemi con la notifica non attiva, quindi non potevo usarlo. Inoltre hanno detto che la loro v.5.5.6 è pulita e non ha alcun UIWebViewIssues dato che hai aggiornato il tuo iOS sdk alla 6.12. + Maggiori informazioni qui . Quindi questo mi ha spinto alla mia seconda ipotesi che nel mio caso era "react-native-ux-cam". Fortunatamente hanno aggiornato la loro libreria per rimuovere tutti i riferimenti di UIWebView. Ho aggiornato all'ultima versione e BOOM, il problema è stato risolto. Ho inviato la mia app ad Apple e finora nessun avviso. Maggiori informazioni qui Funzionato 💥

Spero che questo aiuti qualcuno.


2

Backstory

Nel mio progetto ReactJS + Cordova ho caricato un'app sull'app store ed è andata a buon fine. Poco dopo ho ricevuto un'e-mail di citazione ITMS-90809: Deprecated API Usage. Dopo ore (più di giorni) di ricerca e caricamenti multipli non riusciti mi sono connesso ad Apple utilizzando un token sviluppatore a pagamento ($ 50); hanno risposto fondamentalmente dicendo "controlla la cartella dei moduli del tuo nodo" e hanno rimborsato il mio token perché non mi avrebbero aiutato con questo errore estremamente ambiguo.

Tentativi precedenti

  • Cordova aggiornato per utilizzare i plugin wkwebview-engineewkwebviewxhrfix
  • Usando grep -rarchivi, sorgenti ios e sorgenti dell'intero progetto, ho trovato MOLTE note ma niente che mi aiutasse davvero.
  • aggiornato tutti i npmpacchetti
  • puliti e aggiornati tutti i cocoapodpod

Tentativo finale

Dopo aver rimosso tutti i plug-in di cordova "extra", i pacchetti npm e i pod, mi è rimasta la shell di un'applicazione, ma ancora di fronte al rifiuto della mela. usando grep -rancora c'era ancora un riferimento a "facebook" che mi ha portato a una vecchia copia del FBSDK.

Soluzione

FBSDKera stato aggiunto manualmente a target > Build Phases > Link Binary With Libraries. C'era anche un associato cordovaFacebook.min target > Build Phases > Compile Sources. Dopo aver rimosso questi file vecchi e non mantenuti, sono stato in grado di caricare su iTunes Connect senza problemi.


1

Nel mio caso, Firebase/Authutilizzavo l'API UIWebView deprecata e la versione che stavo usando era una più vecchia. Quindi ho appena aggiornato il Firebase/Authpod utilizzando il comando,

pod update 'Firebase/Auth'

Nota : per capire i framework che utilizzano questa API, cerca semplicemente "UIWebView" ( cmd+ shift+ F)


Quindi questo è quello che ho fatto e apparentemente dice Installazione di FirebaseInstanceID 4.2.5 (era 4.2.2) e non ha risolto il mio problema
Jules Lee

1

FB Sdk sopra la versione 7.16.1 presenta questo problema. In realtà non ha file nella cartella del framework.

Questo errore viene rimosso quando lo crei utilizzando FBSDK v7.16.1, ma Appstore ha rifiutato l'app, a causa dell'utilizzo di API deprezzato (UIWebView).

Lo risolvo usando FBSDK v7.19.2.

1) Quando si crea il progetto per xcode, viene visualizzato l'errore di citazione, shareKit non trovato. Lo risolvo copiando la cartella facebookSDK dalla cartella framework della mia precedente build (con fbsdk v7.16.1), nella stessa posizione della cartella xcode corrente (frameworks / FacebookSDK ....)

2) Quindi, apri il tuo progetto xcode, aggiungi i file dalla posizione: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) in Frameworks in Xcode.

3) Aggiungi "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" in Framework Search Paths nelle impostazioni di build su Xcode.

4) Apri il progetto nel terminale: digita "grep -r" UIWebView "." , se questo mostra una corrispondenza con UIWebView, rimuoverlo aprendo il file.

5) Se mostra la corrispondenza in un file binario di FBSDKCoreKit. Apri il file in TextEdit su MAC e trova e sostituisci tutto "UIWebView" in "WKWebView"

6) Salvalo e aggiungilo di nuovo a Frameworks su Xcode. Crea e invia ad appstore.


0

Quando crei un'app Ionic, puoi scegliere tra Cordova o Capacitor per distribuire una versione mobile nativa. Mentre le versioni più recenti utilizzano WKWebView automaticamente, Cordova utilizza ancora le API UIWebView a titolo definitivo o contengono riferimenti ad esse (Capacitor è stato aggiornato per rimuovere questi riferimenti - vedi sotto).

Dopo l'invio dell'app, Apple cerca nel codice dell'app la stringa "UIWebView", quindi genera un avviso di invio, se trovato. Pertanto, sarà necessaria una versione futura di cordova-ios (la libreria iOS di Cordova) per garantire che tutti i riferimenti alle API UIWebView vengano rimossi.

un altro pensiero. Non so se abbia senso o sia tecnicamente possibile.

Spostare anche UIWebView in un plug-in e fare in modo che cordova-ios utilizzi questo o alcuni dei plug-in WKWebView. cordova-ios contiene solo il codice per caricare una visualizzazione web. Per impostazione predefinita, la versione successiva dovrebbe caricare Apache WKWebViewEngine (Plugin installato di default sulle nuove app, Istruzioni di migrazione per le vecchie app). Gli utenti che necessitano di UIWebView, di Ionic, di un fork o di altri possono specificarne uno proprio come è adesso.

In questo modo nessun UIWebView sarebbe in cordova-ios e sarebbe ancora abbastanza flessibile come oggi.


0

Ho affrontato lo stesso per l'app nativa React. Controlla sotto le cose:

1) Stai utilizzando il modulo react-native-webview piuttosto che importarlo direttamente da react-native (la webview della community è deprecata come rimozione lean core nella v0.60 e verrà rimossa nella prossima versione stabile). ( controlla qui )

2) Verifica anche se stai usando librerie di terze parti che usano webview siano aggiornate, altrimenti chiedi ai manutentori della libreria di aggiornare il react-native-webview.

3) sei pronto per il caricamento, per favore aggiungi commenti se qualcuno trova qualche difficoltà in più.

Controlla qui le modifiche sostanziali nella v0.60

Un altro modo per sbarazzarsi di questo avviso è: iniziare a passare useWebKit = {true}, vale a dire che stai utilizzando WKWebView e non UIWebView. Quindi puoi eseguire le seguenti operazioni per risolvere il problema: utilizzo API obsoleto.

  1. Rimuovi librerie / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Rimuovi librerie / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Ora ho già caricato app.ipa su AppStore con successo senza alcun avviso di autorizzazione.

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

0

Se qualcuno mi aiuta, corro pod updatesul terminale e poi archivio di nuovo. Per me va bene.


Questo copre le app iOS ma non aiuta Android o altre app mobili.
Jacksonkr,

Questo è un problema specifico di iOS, Android non ha lo stesso problema
slothstronaut

0

Per me, gli script non hanno aiutato. Ho dovuto semplicemente passare manualmente attraverso ogni framework e guardare la nota di rilascio e aggiornarli.


0

Mi sbarazzo di questo seguendo i passaggi seguenti-

Passo 1:

Cerca "UIWebView" nella directory del progetto xcode

Passo 2:

Fare clic con il tasto destro (su RCTWebView.m) e selezionare "Reveal In Project Navigator"

Passaggio 3:

Scorri verso il basso ed elimina solo i seguenti quattro file:

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

Quindi pulisci il progetto e l'archivio.

NB: Se usi la libreria 'react-native-community / react-native-webview' , aggiorna con l'ultima versione altrimenti è fatto.



0

Per trovare dove stai usando a UIWebView, vai alla radice del tuo progetto nel terminale e usa questo comando

grep -r -F "UIWebView" .

Il "." è molto importante. Indica al sistema di cercare la stringa "UIWebView" nella cartella e nelle sottocartelle correnti. Questo cercherà anche nelle biblioteche di cocoapods


0

Per aggiornare WebView deprecato in ios

Questo ha risolto il mio problema con successo

piattaforme cd / ios grep -r UIWebView Pods /

Apri Podfile e aggiungi / sostituisci pod AFNetworking come

pod "AFNetworking", "~> 4.0"

Finalmente nell'aggiornamento del pod del terminale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.