ITMS-90809: Uso de API obsoleto: Apple dejará de aceptar envíos de aplicaciones que usen API UIWebView

91

Ayer, subí mi aplicación a TestFlight y después de un tiempo Apple me envió esta advertencia:

ITMS-90809: Uso de API obsoleto: Apple dejará de aceptar envíos de aplicaciones que utilicen las API UIWebView. Consulte https://developer.apple.com/documentation/uikit/uiwebview para obtener más información.

El caso es que no uso UIWebView en mi aplicación, así que intenté actualizar mis pods, pero seguí siendo lo mismo. Por cierto, esta es mi tercera compilación en TestFlight y esta es la primera vez que Apple me envía esto. ¿Algunas ideas?

Actualizar

Estas son mis vainas:

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'

Actualización 2

Parece que encontré los marcos con el 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

Entonces, ¿tengo que esperar a que Google los arregle y actualice mis pods?

Mella
fuente
Verifique qué Pods está usando y si usan UIWebView. Por ejemplo, SDK de banner, pero es posible que también desee comprobar otros SDK.
Gerharbo
1
@Gerharbo Solo uso pods de Firebase y no puedo encontrar UIWebView dentro de ellos.
Nick
Para aquellos que usan cordova + reactjs (o angular), consulte cordova-plugin-wkwebview-engine y cordova-plugin-wkwebviewxhrfix
Jacksonkr

Respuestas:

102

Compruebe si utiliza en su código la clase UIWebView; Si es así, reemplace su implementación con WKWebView, de lo contrario, debe verificar sus Pods.

Vaya con el terminal a la carpeta de su proyecto y ejecute el comando: grep -r "UIWebView" .

Todos los grupos de anuncios coincidentes deben actualizarse. Ahora estoy atascado porque encontré UIWebView en Google AdMob (versión 7.49.0) y estoy esperando una nueva versión de Google.

iNardex
fuente
22
Cuando ingresé el comando en la terminal, recibo la siguiente advertencia "grep: advertencia: búsqueda recursiva de stdin" y no devuelve ninguna respuesta incluso después de 30 minutos. ¿Alguna idea?
Durai Amuthan. H
1
Funcionó perfectamente. Usé esto para descubrir que UnityAds.framework está usando UIWebView. Necesitan actualizar a WKWebView.
SOFTWARE Apollo
1
Tal vez obtenga un resultado como el siguiente. El archivo binario /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate coincide. Lo resolví eliminando mi xcworkspace y la instalación de pod nuevamente.
ShaoJen Chen
2
¿Todavía recibes esto @WilliamNardo? A pesar de que he actualizado más allá de la supuesta versión para solucionarlo: " 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)todavía obtengoBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169
14
@ DuraiAmuthan.H comprobar que agregó el punto / punto (.) Al final del comando grep. Inicialmente cometí el mismo error
Wheelie
68

Puede examinar cada uno de los marcos en la aplicación archivada para ver si alguno de ellos hace referencia UIWebView. Desde la línea de comando cdhasta la aplicación archivada, por ejemplo:

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

Una vez allí, use el nmcomando para volcar los símbolos de su aplicación y cada uno de los marcos de la aplicación:

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

Esto al menos le dirá qué marco es el culpable.

Rudedog
fuente
Gracias por tu respuesta me ayudó mucho. Actualizaré mi pregunta con más información.
Nick
Entonces, ¿lo único que puedo hacer ahora es esperar a que Google resuelva los problemas?
Nick
2
Sí, deberá esperar (o arreglarlos usted mismo y enviar una solicitud de extracción). No estoy seguro de cuál es la fecha límite exacta para eliminar todos los usos UIWebView, pero dudo mucho que sea antes de que se lance iOS 13 este otoño.
Rudedog
@Rudedog ¿cómo puedo arreglar el cuadro funciona yo mismo? En primer lugar, gracias por su respuesta ... después de seguir su respuesta, parece que tengo 4 marcos que usan UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny
2
@johnny, tendría que clonar cada repositorio y averiguar dónde usan UIWebView, eliminar o reemplazar el código que lo usa y posiblemente enviar solicitudes de extracción si desea que sus cambios vuelvan al repositorio principal. O simplemente puede esperar a que los encargados de mantenimiento lo arreglen ellos mismos. Como mencioné antes, en este momento Apple solo está advirtiendo a los desarrolladores sobre esto y en realidad no está rechazando los binarios, por lo que tiene algo de tiempo para esperar a que los mantenedores ascendentes arreglen las cosas.
Rudedog
9

Responderé a mi propia pregunta ya que tengo noticias sobre este correo electrónico. Google me dijo que hay varios tickets sobre este problema y que lo van a resolver lo antes posible. También hoy mi aplicación ha sido aprobada para la AppStore, por lo que parece ser solo una advertencia por el momento.

Mella
fuente
Hola, ¿puedes dirigirme a alguna solución? También estoy enfrentando el mismo problema. La aplicación no está aprobando incluso después de lo que puede golpear y ensayos ..
Dinesh Rawat
6

WKWebViewes el reemplazo de UIWebView. Si no tiene UIWebViewuso en su código, ejecutando el siguiente comando de terminal, puede saber fácilmente qué biblioteca todavía está usando la UIWebViewreferencia (no se pierda el. (Punto)).

Desde la línea de comando, cd a la aplicación archivada, p. Ej.

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

Y luego corre

grep -r UIWebView

O llamar

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

Esto le dará salida para la coincidencia del marco

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

Salida para coincidencia de biblioteca

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

Actualice estas bibliotecas

pod update

también mira este artículo mediano

Jawad Ali
fuente
utilice "grep -r -F" UIWebView "." en lugar de "grep -r UIWebView"
Manish
1
En Mac, use "grep -r UIWebView". en la ruta del proyecto (con espacio y punto al final)
Vins
Ya actualicé todos los pods que estaban usando UIWebView(por ejemplo, AFNetworking, ZDCChat) y también verifiqué los pods actualizados porque ya están actualizados para WKWebView, pero todavía grep -r UIWebView .me dan la misma lista de pods para UIWebViewcoincidencias y Apple también advierte al enviar la aplicación en 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
ZDCChatAPIesta cápsula usauiwebview
Jawad Ali
5

Para proyecto con cocoapods:

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

Si está compilando con Unity 3D , este es un problema conocido (reconocido en los registros de cambios), actualmente está solucionado para la versión 2019.3 (se está probando y se está modificando).

Consulta el ticket aquí https://unity3d.com/unity/whats-new/2019.2.4

Dalton Lima
fuente
2

Trasfondo

En mi proyecto ReactJS + Cordova, cargué una aplicación en la tienda de aplicaciones y tuvo éxito. Poco después recibí un correo electrónico citandoITMS-90809: Deprecated API Usage . Después de horas (durante días) de investigación y múltiples cargas fallidas, me conecté con Apple usando un token de desarrollador pagado ($ 50); respondieron básicamente diciendo "revisa la carpeta de módulos de tu nodo" y reembolsaron mi token porque no me iban a ayudar con este error extremadamente ambiguo.

Intentos anteriores

  • Córdoba actualizada para usar los complementos wkwebview-engineywkwebviewxhrfix
  • Usando grep -rarchivos, fuente de ios y fuente completa del proyecto, encontré MUCHAS notas pero nada que realmente ayudara.
  • actualizado todos los npmpaquetes
  • limpiado y actualizado todos los cocoapodpods

Intento final

Después de eliminar todos los complementos, paquetes npm y pods de cordova "extra", me quedé con el shell de una aplicación, pero aún enfrentaba el rechazo de Apple. usando de grep -rnuevo todavía había una referencia a "facebook" que me llevó a una copia antigua del FBSDK.

Solución

FBSDKse había agregado manualmente a target > Build Phases > Link Binary With Libraries. También hubo un asociado cordovaFacebook.men target > Build Phases > Compile Sources. Después de eliminar estos archivos antiguos y sin mantenimiento, pude cargarlos en iTunes Connect sin problemas.

Jacksonkr
fuente
2

Resolví este problema actualizando el complemento iónico de vista web y agregando preferencias en config.

Seguí los siguientes pasos:

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

2.el complemento cordova agregar cordova-plugin-ionic-webview @ latest

Preferencias agregadas en el archivo de configuración en la plataforma ios:

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

Después de seguir estos pasos, mi aplicación se envía y luego se aprueba en revisión.

Munish Chechi
fuente
1

En mi caso, Firebase/Authestaba usando la API UIWebView obsoleta y la versión que estaba usando era una anterior. Así que actualicé el Firebase/Authpod con el comando

pod update 'Firebase/Auth'

Nota : Para averiguar los frameworks que están usando esta API, simplemente busque "UIWebView" ( cmd+ shift+ F)

ceekay
fuente
Así que esto es lo que hice y aparentemente dice Instalando FirebaseInstanceID 4.2.5 (era 4.2.2) y no resolvió mi problema
Jules Lee
1

Fue un proceso largo, pero logré resolver el problema mencionado anteriormente. Déjame guiarte por el proceso y compartir mis hallazgos. Lo primero es lo primero, no es necesario que lo que funcionó para mí funcionará para ti. Necesita probar todas las soluciones posibles que se ofrecen. Seguí algunas de las soluciones publicadas en varios hilos. (Vinculado a continuación).

  1. Cuando estaba en RN 0.59, encontré el comentario de estos archivos mencionado aquí . No funciono
  2. Actualicé a RN 0.61, no encontré estos archivos. Intenté cargar la aplicación pero aún recibí la advertencia. No funciono
  3. Actualicé las siguientes bibliotecas a sus últimas versiones. No funcionó react-native-device-info react-native-view
  4. Probé este comando grep mencionado aquí . Hubo ciertas bibliotecas que aparecieron, es decir, react-native-fbsdk, react-native-google-sign, react-native-gesto-handler. Así que los actualicé todos y cargué la compilación, pero aún recibí la advertencia. No funciono

  5. El último recurso para actualizar todas las bibliotecas, que sé que iba a llevar mucho tiempo. Así que mi primera suposición fue actualizar 'react-native-firebase' al último problema de la versión v6 . Pero tenía algunos problemas con la notificación que no estaba activada, por lo que no pude usarla. También mencionaron que su v.5.5.6 está limpio y no tiene ningún UIWebViewIssues dado que actualiza su sdk de iOS a 6.12. + Más información aquí . Así que esto me llevó a mi segunda conjetura que en mi caso fue 'react-native-ux-cam'. Afortunadamente, actualizaron su biblioteca para eliminar todas las referencias de UIWebView. Actualicé a la última versión y BOOM, el problema se resolvió. Envié mi aplicación a Apple y hasta ahora no hay advertencias. Más información aquí Trabajó 💥

Espero que esto ayude a alguien.

Zeerak Hameem
fuente
1

FB Sdk anterior a la versión 7.16.1 tiene este problema. En realidad, no tiene archivos en la carpeta del marco.

Este error se elimina cuando lo compila con FBSDK v7.16.1, pero Appstore rechazó la aplicación debido al uso depreciado de la API (UIWebView).

Lo resuelvo usando FBSDK v7.19.2.

1) Cuando compila el proyecto para xcode, muestra el error de mención, shareKit no encontrado. Lo resuelvo copiando la carpeta facebookSDK de la carpeta del marco de mi compilación anterior (con fbsdk v7.16.1), en la misma ubicación de la carpeta xcode actual (frameworks / FacebookSDK ....)

2) Luego, abra su proyecto xcode, agregue archivos desde la ubicación: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) en Frameworks en Xcode.

3) Agregue "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" en las rutas de búsqueda de Framework en la configuración de compilación en Xcode.

4) Abra el proyecto en la terminal: escriba "grep -r" UIWebView "". , si muestra alguna coincidencia con UIWebView, elimínelo abriendo el archivo.

5) Si muestra coincidencia en un archivo binario de FBSDKCoreKit. Abra el archivo en TextEdit en MAC y busque y reemplace todo "UIWebView" por "WKWebView"

6) Guárdelo y vuelva a agregarlo a Frameworks en Xcode. Cree y envíe a la tienda de aplicaciones.

Aqib Ahmed
fuente
0

Cuando crea una aplicación Ionic, puede elegir entre Cordova o Capacitor para implementar una versión móvil nativa. Si bien las versiones más recientes usan WKWebView automáticamente, Cordova aún usa las API UIWebView directamente o contienen referencias a ellas (Capacitor se ha actualizado para eliminar estas referencias, ver más abajo).

Tras el envío de la aplicación, Apple busca en el código de la aplicación la cadena "UIWebView" y luego genera una advertencia de envío si la encuentra. Por lo tanto, se requerirá una versión futura de cordova-ios (la biblioteca iOS de Cordova) para garantizar que se eliminen todas las referencias a las API de UIWebView.

otro pensamiento. No sé si tiene sentido o es técnicamente posible.

Mueva UIWebView a un complemento también y haga que cordova-ios use este o algunos de los complementos de WKWebView. cordova-ios solo contiene el código para cargar una vista web. De forma predeterminada, la próxima versión debería cargar Apache WKWebViewEngine (complemento instalado de forma predeterminada en aplicaciones nuevas, instrucción de migración para aplicaciones antiguas). Los usuarios que necesitan UIWebView, Ionic, una bifurcación u otros pueden especificar la suya propia como está ahora.

De esa manera, ningún UIWebView estaría en cordova-ios y aún sería lo suficientemente flexible como hoy.

Sugerencia de expertos
fuente
0

Enfrenté lo mismo para la aplicación nativa React. Compruebe las cosas a continuación:

1) Está utilizando el módulo react-native-webview en lugar de importarlo directamente desde react-native (community webview está obsoleto como una eliminación de núcleo lean en v0.60 y se eliminará en la próxima versión estable). ( marque aquí )

2) Verifique también si está utilizando bibliotecas de terceros que usan webview y si no están actualizadas, pida a los encargados de mantenimiento de la biblioteca que actualicen react-native-webview.

3) está listo para la carga, agregue comentarios si alguien encuentra más dificultades.

Consulte aquí los cambios importantes en v0.60

Otra forma de deshacerse de esta advertencia es: comience a pasar useWebKit = {true}, es decir, está usando WKWebView, no UIWebView en absoluto. Luego, puede hacer lo siguiente para resolver el problema: uso de API obsoleto.

  1. Eliminar bibliotecas / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Eliminar bibliotecas / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Ahora ya he subido app.ipa a AppStore con éxito sin ninguna advertencia de permiso.

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

Si alguien me ayuda, lo ejecuto pod updateen la terminal y luego lo archivo de nuevo. Funciona para mi.

Alfredo Luco G
fuente
Eso cubre las aplicaciones de iOS, pero no ayuda a Android ni a otras aplicaciones móviles.
Jacksonkr
Este es un problema específico de iOS, Android no tiene el mismo problema
slothstronaut
0

Para mí, los guiones no ayudaron. Tuve que revisar manualmente cada marco, mirar la nota de la versión y actualizarlos.

green0range
fuente
0

Me deshago de esto siguiendo los pasos a continuación:

Paso 1:

Busque "UIWebView" en el directorio del proyecto xcode

Paso 2:

Haga clic derecho (en RCTWebView.m) y seleccione "Revelar en Project Navigator"

Paso 3:

Desplácese hacia abajo y elimine solo los siguientes cuatro archivos:

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

Luego limpie el proyecto y el archivo.

NB: Si usa la biblioteca 'react-native-community / react-native-webview' , actualice con la última versión; de lo contrario, estará listo.

Ali Hasan
fuente
0

Para encontrar dónde está usando un UIWebView, vaya a la raíz de su proyecto en la terminal y use este comando

grep -r -F "UIWebView" .

El '.' es muy importante. Le dice al sistema que busque la cadena "UIWebView" en la carpeta y subcarpetas actuales. Esto también buscará en las bibliotecas de cocoapods.

Amal TS
fuente