px-ios
px-ios copied to clipboard
Fatal Error - App Crashes when using keyboard on iOS 13 based app
Al intentar integrar la SDK de MercadoPago en un proyecto mediano ya avanzado desarrollado con Xcode 11 y para iOS 13 me encontré con el inconveniente de que al agregar la SDK de MercadoPago via cocoa pods, correr la app y simplemente querer acceder a algún input (UITextField / UITextView) la aplicación que antes funcionaba perfectamente, crashes.
Luego de algo de debugging encontré lo siguiente, para ilustrar el error se creo una aplicación básica con el template de Xcode 11 y se instalo la SDK de MercadoPago via cocoa pods. Vale notar que en ningún momento se hace uso de ningún componente de la SDK sin embargo hay código de la SDK que se ejecuta.
Tipo de componente utilizado
Simplemente pod install MercadoPago's SDK
Comportamiento Esperado
- UITextfield básico funcionando.
Comportamiento Actual
- Aplicación crashes cuando se hace tap en un UITextField.
Pasos a reproducir
- Abrir Xcode 11 y crear una nueva aplicación
- Agregar el Pod MercadoPago e instalar
- En el ViewController.swift agregar un UITextfield y centrarlo en la pantalla
- Run app en emulador o iPhone
- Hacer tap en textfield para abrir teclado
- Aplicación crashes.
- Debugger message: 'Unrecognized selector send to instance 0x....'



Observación
- Este error se debe ha que se llama la propiedad "window" del App Delegate en uno de los componentes de la SDK. La propiedad "window" ya no existe en AppDelegate.swift en aplicaciones desarrolladas a partir de iOS 13 con Xcode 11. La propiedad window se ha mudado a SceneDelegate.
Hola, me ocurre el mismo error. Si no se selecciona ningún TextField y se procede a realizar el checkout en el momento que aparece un TextField (EJ: Tarjeta de Crédito) también sucede el mismo error, con adición de: Can't find keyplane that supports type 4 for keyboard iPhone Creo que por el momento si se necesita probar el funcionamiento, se puede optar por una versión previa de MercadoPagoSDK y un simulador de iOS 12.4
Hola, el error sucede incluso sin que se utilize alguna clase que se incluya en MercadoPagoSDK. Basta con importar la SDK al proyecto y crear un UIViewController vacío con un UITextfield y abrirlo para que la app crashee.
Parece que el error esta en que se utiliza la propiedad window del AppDelegate que en aplicaciones desarrolladas partir de iOS 13 (que usan SceneDelegate) ya no existe y esto causa el crash de 'Unrecognized selector sent to instance...' .
Lamentablemente las aplicaciones que están basadas en SwiftUI, (como es el caso de mi equipo) no pueden utilizar en producción esta SDK tan buena hasta que este issue se resuelva.
Buenas, pudieron encontrar algun fix? Intente comunicarme con MercadoPago pero todavia no me respondieron. Saludos!
Buenas, pudieron encontrar algun fix? Intente comunicarme con MercadoPago pero todavia no me respondieron. Saludos!
hola, prueba agregando var window: UIWindow? en el appdelegate y bajando la version de despliegue a 12
Buenas, pudieron encontrar algun fix? Intente comunicarme con MercadoPago pero todavia no me respondieron. Saludos!
hola, prueba agregando var window: UIWindow? en el appdelegate y bajando la version de despliegue a 12
Hola, lamentablemente el fix que recomiendas no soluciona el problema para proyectos basados en SwiftUI que requieren iOS13.
Para solucionar el problema de 'Unrecognized selector sent to instance...' cuando un elemento de UI que requiere teclado toma el foco, lo solucioné siguiendo el consejo de @jefherson.
Simplemente agregando esa variable como parametro en tu AppDelegate el problema se solucionó.