Errores de terceros en aplicaciones multiplataformas

in Hive Cuba2 years ago

New Project.png

Estoy trabajando en una app multiplataforma hecha con Electron y llevo exactamente una semana fajado con un error superraro que me afectaban cuando compilaba en Windows. Aquí dejo mi experiencia para los #devs por si les puede servir.

Estoy muy a favor de utilizar soluciones como Electron y Capacitor que permiten hacer soluciones multiplataformas, realmente hacen el proceso mucho más rápido que tener que construir una solución nativa para cada plataforma.

Como todo, nada es perfecto y aunque utilizar estas soluciones es muy cómodo, necesitas de determinadas dependencias nativas de los sistemas operativos para hacer el Build de la app, por lo que para compilar para macOS necesitas el sistema y así mismo ocurre con los otros. Aparte la API tiene determinadas restricciones, según el OS y tienes que hacer unas cuantas diferenciaciones para cada uno. En mi caso trabajo en #Linux y para compilar las soluciones para las diferentes OS utilizo travisci que tiene ISOs de Mac, Linux y Windows, aunque para este mismo lo hago desde Linux con Docker. Puedes ver appveyor también.

Screenshot from 2022-04-07 10-39-18.png

En fin, comencé a adicionarle a la aplicación algunas funciones nativas, para esto utilicé directamente algunas de las características que ofrece Electron y para otras plug-ins de terceros.

Todo bien en mi entorno, funcionaba sin problemas. Subí el código y se compiló para todos los sistemas operativos sin problema. Luego descargue el build de Windows para probarlo antes de lanzarlo y ahí empezaron los problemas. La app funcionaba, pero no del todo, tenía unas cuantas funciones nativas afectadas. Como esto era un build no podía ver que error se estaba generando, así que me monte una máquina virtual de Windows para ejecutar la aplicación.

Ahí el problema cambio y cuando terminaba de instalar todos los paquetes y levantaba el servidor no tenía el mismo comportamiento del build, sencillamente no llegaba a cargar la app, mostraba otro error.
Por otro lado, ni siquiera la versión web de la app se levantaba bien y me mostraba otro error en un componente que siempre funciono, que no se había modificado. En ese punto comencé a hacer todo tipo de pruebas intentando solucionar las cosas

  • Upgradiar los paquetes
  • Cambiar el gestor de paquetes
  • Probar con versiones específicas de algunos paquetes
  • Subirme a la placa para coger mejor cobertura (Los datos están fatales)

Luego de unas cuantas pruebas y 20 yarn install a 80kb/s en 4g+ estaba en el mismo punto 😩. Lo que más me desconcertaba era que funcionaba en Linux y que la compilación en Travis para Windows también, pero local estaba muerto el Sever. Ya en ese punto no me quedo más que revertir todos los cambios (que era el trabajo de un mes y medio) y ver que lo estaba ocasionando.

El problema: Un plug-in de terceros

De alguna forma esto funcionaba bien en Linux, pero en Windows generaba algún problema interno que por algún motivo se reflejaba incluso en otros paquetes.

¿Qué aprender de esto?

  • Intentar utilizar las soluciones nativas del framework que utilicemos y solo recurrir a paquetes de terceros si es imprescindible
  • Cuando se van a tocar muchas funciones nativas en las #PWA los resultados pueden variar mucho según la plataforma, así que lo más recomendado es utilizarlas en apps que manejen casi todo en el webview.
  • Un paquete que tenga un problema puede mostrarse como un error incluso en otro paquete (Asumo que por alguna dependencia)
  • En apps multiplataformas, si un release va a incluir varios features es recomendable generar un build de prueba cada vez que introducimos un paquete nuevo o se adiciona un feature nativo.
  • Trabajar en un mismo bug y con la internet muy mala por varios días puede acompañarse de cambios de humor y deseos de cambiar de profesión. 😅😅

Publicado originalmente en Mi Blog Personal

Sort:  

Bueno, ahora leyendo este post te puedo comentar varias cosas: la primera es que las pruebas continuas y automatizadas te pueden aliviar el 80% de estos problemas, ya sea para detectar que hay un problema como para definir en donde es.
También creo que deberías implementar un sistema de CI/CD para que obtengas estos errores lo antes posible, así no pierdes horas y esfuerzos valiosos.

Y te secundo en la afirmación de usar librerías de terceros. Yo suelo revisar muy bien quien, como cuando y donde de la librería antes de usarla. Necesito usar algo que se note que tiene gente detrás manteniéndolo, arreglando los errores lo más rápido posible y con perspectivas de que se van a mantener haciéndolo por mucho tiempo

Gracias por el comentario bro. El tema es que eso está implementado con un CI/CD y con pruebas, pero lo malo es que no cubría este escenario por el entorno en que se ejecutan las pruebas, que es en Linux 😞, básicamente por ahí el porqué del post específico para estas apps multiplataforma. Si la plataforma donde tienes el proceso de integración continua tiene ISOs de estos OS y puedes correr las pruebas para cada entorno entonces si te lo quitas de arriba.

Bro ahora leyendo esto y acordándome de lo que me dijiste de github Actions. XD esta genial eso tienen ISOS parece para todos los sistemas y dan 2000 minutos free XDD está brutal eso. Me mudo para allá fijo

Todavía no sé cómo tienen tantas libertades gratis pero las tienen. Yo he compilado para Windows y Linux perfectamente usándolos y es bastante rápida la compilación so todo sale bien

Está genial de verdad asere, hay que aprovecharlo. En travisCI el plan free tiene una cuota fija, no se renueva, por eso solo corría las pruebas en Linux para ahorrarlo lo más que podía, pero este de Github está letal.

Man por lo que veo la programación te lleva a tope, yo estuve un tiempo tratando de aprender, pero definitivamente no es lo mio, pero te comprendo hermano.

He pasado no por algo tan crudo, pero si por el dolor de cabeza de ver como alguien en un tutorial pone el Código, uno lo realiza junto al profe y de pronto a la hora de copilar o a la hora de ver el resultado, zas, no funciona.

Es duro, pero te esfuerzas para lograr tus objetivos, lo bueno es que aprendiste algo nuevo y compartiste las mieles. Súper, un abrazo.

#HiveIsTheWay

Así mismo es mi hermano, hace rato que no publicada nada por acá, hoy afín logre dar con el problema y aproveche la emoción de haber avanzado algo y a escribir un poco que siempre sienta bien. 🙌