ITMS-90809: Utilisation obsolète des API - Apple cessera d'accepter les soumissions d'applications utilisant les API UIWebView


91

Hier, j'ai téléchargé mon application sur TestFlight et après un certain temps, Apple m'a envoyé cet avertissement:

ITMS-90809: Utilisation d'API obsolète - Apple cessera d'accepter les soumissions d'applications qui utilisent les API UIWebView. Voir https://developer.apple.com/documentation/uikit/uiwebview pour plus d'informations.

Le fait est que je n'utilise pas UIWebView dans mon application, j'ai donc essayé de mettre à jour mes pods, mais c'est toujours la même chose. Des idées?

Mise à jour

Ce sont mes pods:

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'

Mise à jour 2

On dirait que j'ai trouvé les cadres avec le problème.

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

Alors maintenant, dois-je attendre que Google les répare et mette à jour mes pods?


Vérifiez les pods que vous utilisez et s'ils utilisent un UIWebView. Par exemple, les SDK de bannière, mais vous pouvez également vérifier d'autres SDK.
Gerharbo

1
@Gerharbo J'utilise uniquement des pods Firebase et je ne trouve pas UIWebView à l'intérieur.
Nick

Pour ceux qui utilisent cordova + reactjs (ou angular), consultez cordova-plugin-wkwebview-engine et cordova-plugin-wkwebviewxhrfix
Jacksonkr

Réponses:


102

Vérifiez si vous utilisez dans votre code la classe UIWebView; si oui, remplacez votre implémentation par WKWebView, sinon vous devez vérifier vos pods.

Allez avec le terminal dans votre dossier de projet et exécutez la commande: grep -r "UIWebView" .

Tous les pods correspondants doivent être mis à jour. Maintenant, je suis bloqué car j'ai trouvé UIWebView dans Google AdMob (version 7.49.0) et j'attends une nouvelle version de Google.


22
Quand j'ai entré la commande dans le terminal, j'obtiens l'avertissement suivant "grep: avertissement: recherche récursive de stdin" et il ne renvoie aucune réponse même après 30 minutes. Des idées?
Durai Amuthan.H

1
A parfaitement fonctionné. J'ai utilisé ceci pour découvrir qu'UnityAds.framework utilise UIWebView. Ils doivent se mettre à jour vers WKWebView.
Apollo SOFTWARE le

1
Peut-être que vous obtiendrez un résultat comme ci-dessous .. Le fichier binaire /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate correspond. Je l'ai résolu en supprimant mon xcworkspace et en installant à nouveau le pod.
ShaoJen Chen

2
Avez-vous toujours ça @WilliamNardo? Même si j'ai mis à jour après la version supposée pour le corriger: " 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
,,

14
@ DuraiAmuthan.H vérifiez que vous avez ajouté le point / point (.) À la fin de la commande grep. J'ai d'abord fait la même erreur
Wheelie

68

Vous pouvez examiner chacun des frameworks de l'application archivée pour voir si l'un d'eux fait référence UIWebView. De la ligne de commande, cdà l'application archivée, par exemple:

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

Une fois sur place, utilisez la nmcommande pour vider les symboles de votre application et de chacun des frameworks de l'application:

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

Cela vous dira au moins quel cadre est le coupable.


Merci pour votre réponse, cela a beaucoup aidé. Je mettrai à jour ma question avec de plus amples informations.
Nick

Alors maintenant, la seule chose que je puisse faire est d'attendre que Google résolve les problèmes?
Nick le

2
Oui, vous devrez attendre (ou les réparer vous-même et soumettre une pull request). Je ne sais pas quelle est la date limite exacte pour supprimer toutes les utilisations UIWebView, mais je doute fortement que ce soit avant la sortie d'iOS 13 cet automne.
Rudedog

@Rudedog comment puis-je réparer le cadre fonctionne moi-même? Tout d'abord merci pour votre réponse ... après avoir suivi votre réponse, il semble que j'ai 4 frameworks qui utilisent UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny

2
@johnny vous devrez cloner chaque référentiel et découvrir où ils utilisent UIWebView, supprimer ou remplacer le code qui l'utilise, et éventuellement soumettre des pull requests si vous souhaitez que vos modifications reviennent dans le référentiel principal. Ou, vous pouvez simplement attendre que les responsables le réparent eux-mêmes. Comme je l'ai mentionné précédemment, pour le moment, Apple avertit simplement les développeurs à ce sujet et ne rejette pas les binaires, vous avez donc le temps d'attendre que les responsables en amont corrigent les choses.
Rudedog le

9

Je répondrai à ma propre question car j'ai des nouvelles de cet e-mail. Google m'a dit qu'il y avait plusieurs tickets concernant ce problème et qu'ils allaient résoudre ce problème dès que possible. Aujourd'hui également, mon application a été approuvée pour l'AppStore, donc cela semble être juste un avertissement pour le moment.


Salut pouvez-vous diriger vers une solution, je suis également confronté au même problème. L'application n'approuve pas même après, donc peut frapper et essais ..
Dinesh Rawat

6

WKWebViewest le remplacement de UIWebView. Si vous n'avez pas d' UIWebViewutilisation dans votre code qu'en exécutant la commande de terminal ci-dessous, vous pouvez facilement savoir quelle bibliothèque utilise encore la UIWebViewréférence (ne manquez pas le. (Point)).

À partir de la ligne de commande, cd vers l'application archivée, par exemple

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

Et puis courir

grep -r UIWebView

OU appeler

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

Cela vous donnera la sortie pour la correspondance du cadre

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

Sortie pour la correspondance de bibliothèque

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

Mettre à jour ces bibliothèques

pod update

consultez également cet article moyen


utilisez "grep -r -F" UIWebView "." istead of "grep -r UIWebView"
Manish

1
Sous Mac, utilisez "grep -r UIWebView". dans le chemin du projet (avec espace et point à la fin)
Vins

Déjà mis à niveau tous les pods qu'ils utilisaient UIWebView(par exemple AFNetworking, ZDCChat) et également vérifié les pods mis à jour car ils sont déjà mis à niveau pour WKWebView mais grep -r UIWebView .me donne toujours la même liste de pods pour les UIWebViewmatchs et Apple donne également un avertissement lors de la soumission de l'application sur 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

ZDCChatAPIce pod utiliseuiwebview
Jawad Ali

5

Pour projet avec cocoapodes:

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:



2

Passé

Sur mon projet ReactJS + Cordova, j'ai téléchargé une application sur l'App Store et cela a réussi. Peu de temps après, j'ai reçu un e-mail citant ITMS-90809: Deprecated API Usage. Après des heures (sur plusieurs jours) de recherche et plusieurs téléchargements échoués, je me suis connecté à Apple en utilisant un jeton de développeur payé (50 $); ils ont répondu en gros en disant "vérifiez le dossier de vos modules de nœuds" et ont remboursé mon jeton parce qu'ils n'allaient pas m'aider avec cette erreur extrêmement ambiguë.

Tentatives précédentes

  • Cordova mis à jour pour utiliser les plugins wkwebview-engineetwkwebviewxhrfix
  • En utilisant grep -rles archives, la source ios et la source entière du projet, j'ai trouvé BEAUCOUP de notes mais rien qui n'a vraiment aidé.
  • mis à jour tous les npmpackages
  • nettoyé et mis à jour tous les cocoapodpods

Tentative finale

Après avoir supprimé tous les plugins cordova "supplémentaires", les packages npm et les pods, je me suis retrouvé avec un shell d'une application mais toujours confronté au rejet de la pomme. en utilisant à grep -rnouveau il y avait encore une référence à "facebook" qui m'a conduit à une ancienne copie du FBSDK.

Solution

FBSDKavait été ajouté manuellement à target > Build Phases > Link Binary With Libraries. Il y avait aussi un associé cordovaFacebook.mdans target > Build Phases > Compile Sources. Après avoir supprimé ces anciens fichiers non maintenus, j'ai pu télécharger sur iTunes Connect sans problème.


2

J'ai résolu ce problème en mettant à jour le plugin ionic webview et en ajoutant des préférences dans config.

J'ai suivi les étapes suivantes:

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

2. plug-in cordova ajouter cordova-plugin-ionic-webview @ dernier

3.Ajout de préférences dans le fichier de configuration sous la plateforme ios:

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

Après avoir suivi ces étapes, mon application est soumise et approuvée ultérieurement.


1

Dans mon cas, Firebase/Authj'utilisais l'API UIWebView obsolète et la version que j'utilisais était une version plus ancienne. Je viens donc de mettre à jour le Firebase/Authpod en utilisant la commande,

pod update 'Firebase/Auth'

Remarque : pour déterminer les frameworks qui utilisent cette API, il suffit de rechercher "UIWebView" ( cmd+ shift+ F)


Donc, c'est ce que j'ai fait et apparemment, cela dit: Installer FirebaseInstanceID 4.2.5 (était 4.2.2) et n'a pas résolu mon problème
Jules Lee

1

C'était un long processus, mais j'ai réussi à résoudre le problème mentionné ci-dessus. Laissez-moi vous guider tout au long du processus et partager mes conclusions. Tout d'abord, ce qui a fonctionné pour moi fonctionnera pour vous. Vous devez absolument essayer toutes les solutions possibles. J'ai suivi certaines des solutions publiées dans divers fils de discussion. (Lien ci-dessous).

  1. Quand j'étais sur RN 0.59, j'ai trouvé ces commentaires de fichiers mentionnés ici . N'a pas fonctionné
  2. Je suis passé à RN 0.61, je n'ai pas trouvé ces fichiers. J'ai essayé de télécharger l'application mais j'ai toujours reçu l'avertissement. N'a pas fonctionné
  3. J'ai mis à jour les bibliothèques suivantes avec leurs dernières versions. Ne fonctionne pas. React-native-device-info react-native-view
  4. J'ai essayé cette commande grep mentionnée ici . Il y avait certaines bibliothèques qui sont apparues, à savoir react-native-fbsdk, react-native-google-sign, react-native-gesture-handler. Je les ai donc tous mis à niveau et téléchargé la version, mais j'ai toujours reçu l'avertissement. N'a pas fonctionné

  5. Le dernier recours pour mettre à jour toutes les bibliothèques, ce qui, je le sais, prendrait beaucoup de temps. Ma première hypothèse a donc été de mettre à jour 'react-native-firebase' avec le dernier problème de version v6 . Mais il y avait des problèmes avec la notification non activée, donc je ne pouvais pas l'utiliser. Ils ont également mentionné que leur v.5.5.6 est propre et ne dispose d'aucun UIWebViewIssues étant donné que vous mettez à jour votre sdk iOS vers 6.12. + Plus d'informations ici . Cela m'a donc amené à ma deuxième hypothèse qui, dans mon cas, était «react-native-ux-cam». Heureusement, ils ont mis à jour leur bibliothèque pour supprimer toutes les références d'UIWebView. J'ai mis à jour vers la dernière version et BOOM, le problème a été résolu. J'ai soumis mon application à Apple et aucun avertissement jusqu'à présent. Plus d'informations ici A travaillé 💥

J'espère que cela aide quelqu'un.


1

FB Sdk au-dessus de la version 7.16.1 a ce problème. En fait, il n'y a pas de fichiers dans le dossier du framework.

Cette erreur est supprimée lorsque vous la générez à l'aide de FBSDK v7.16.1, mais l'Appstore a été rejetée de l'application, en raison de l'utilisation dépréciée de l'API (UIWebView).

Je le résous en utilisant FBSDK v7.19.2.

1) Lorsque vous construisez le projet pour xcode, il affiche l'erreur de mention, shareKit introuvable. Je le résous en copiant le dossier facebookSDK du dossier framework de ma précédente build (avec fbsdk v7.16.1), au même emplacement du dossier xcode actuel (frameworks / FacebookSDK ....)

2) Ensuite, ouvrez votre projet xcode, ajoutez des fichiers à partir de l'emplacement: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) dans Frameworks dans Xcode.

3) Ajoutez "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" dans les chemins de recherche de framework dans les paramètres de construction de Xcode.

4) Ouvrez le projet dans le terminal: tapez "grep -r" UIWebView "." , si cela montre une correspondance avec UIWebView, supprimez-la en ouvrant le fichier.

5) S'il affiche une correspondance dans un fichier binaire de FBSDKCoreKit. Ouvrez le fichier dans TextEdit sur MAC et recherchez et remplacez tout "UIWebView" par "WKWebView"

6) Enregistrez-le et ajoutez-le à nouveau dans Frameworks chez Xcode. Créez et envoyez vers l'Appstore.


0

Lorsque vous créez une application Ionic, vous pouvez choisir entre Cordova ou Capacitor pour déployer une version mobile native. Alors que les versions plus récentes utilisent automatiquement WKWebView, Cordova utilise toujours les API UIWebView ou contiennent des références à celles-ci (Capacitor a été mis à jour pour supprimer ces références - voir ci-dessous).

Lors de la soumission de l'application, Apple recherche le code de l'application pour la chaîne «UIWebView» puis génère un avertissement de soumission s'il est trouvé. Par conséquent, une future version de cordova-ios (la bibliothèque Cordova iOS) sera nécessaire pour garantir que toutes les références aux API UIWebView sont supprimées.

une autre pensée. Je ne sais pas si cela a du sens ou est techniquement possible.

Déplacez également UIWebView vers un plugin et faites en sorte que cordova-ios utilise tel ou tel plug-in WKWebView. cordova-ios contient juste le code pour charger une vue Web. Par défaut, la prochaine version devrait charger Apache WKWebViewEngine (Plugin installé par défaut sur les nouvelles applications, Instructions de migration pour les anciennes applications). Les utilisateurs qui ont besoin d'UIWebView, de l'Ionic, d'un fork ou d'autres peuvent spécifier le leur comme c'est le cas maintenant.

De cette façon, aucun UIWebView ne serait dans cordova-ios et il serait encore assez flexible comme aujourd'hui.


0

J'ai rencontré la même chose pour l'application native React. Vérifiez les choses ci-dessous:

1) Vous utilisez le module react-native-webview plutôt que de l'importer directement à partir de react-native (la webview de la communauté est obsolète en tant que suppression du lean core dans la v0.60 et sera supprimée dans la prochaine version stable). ( vérifier ici )

2) Veuillez également vérifier si vous utilisez des bibliothèques tierces qui utilisent Webview est à jour.Sinon, veuillez demander aux responsables de la bibliothèque de mettre à jour le react-native-webview.

3) vous êtes prêt pour le téléchargement, veuillez ajouter des commentaires si quelqu'un trouve d'autres difficultés.

Vérifiez ici les changements de rupture de la v0.60

Une autre façon de se débarrasser de cet avertissement est: commencez à passer useWebKit = {true}, c'est-à-dire que vous utilisez WKWebView et non UIWebView du tout. Ensuite, vous pouvez effectuer les opérations suivantes pour résoudre le problème - Utilisation de l'API obsolète.

  1. Supprimer les bibliothèques / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Supprimer les bibliothèques / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Maintenant, j'ai déjà téléchargé app.ipa sur l'AppStore sans aucun avertissement d'autorisation.

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

0

Si quelqu'un aide, je cours pod updatesur le terminal, puis je archive à nouveau. Ça marche pour moi.


Cela couvre les applications iOS mais n'aide pas Android ou d'autres applications mobiles.
Jacksonkr

Il s'agit d'un problème spécifique à iOS, Android n'a pas le même problème
slothstronaut le

0

Pour moi, les scripts n'ont pas aidé. Je devais simplement parcourir manuellement chaque framework et consulter la note de publication et les mettre à jour.


0

Je m'en débarrasse en suivant les étapes ci-dessous-

Étape 1:

Recherchez «UIWebView» dans le répertoire du projet xcode

Étape 2:

Cliquez avec le bouton droit (sur RCTWebView.m) et sélectionnez «Révéler dans le navigateur de projet»

Étape 3:

Faites défiler vers le bas et supprimez uniquement les quatre fichiers suivants:

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

Ensuite, nettoyez le projet et l'archive.

NB: Si vous utilisez la bibliothèque 'react-native-community / react-native-webview' , mettez à jour avec la dernière version sinon c'est fait.



0

Afin de trouver où vous utilisez a UIWebView, accédez à la racine de votre projet dans le terminal et utilisez cette commande

grep -r -F "UIWebView" .

Le '.' c'est tres important. Il indique au système de rechercher la chaîne "UIWebView" dans le dossier et les sous-dossiers actuels. Cela recherchera également les bibliothèques de cocoapodes

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.