Desarrollo nativo, React Native y Flutter: criterios de selección

Ya en la etapa de diseño de una aplicación móvil, es importante comprender qué idioma es más rentable para un proyecto en particular. Junto con el desarrollo nativo (por ejemplo, para iOS - Swift u Objective-C, para Android - Java o Kotlin), se utilizan marcos multiplataforma como React Native y Flutter. En SimbirSoft ofrecemos varios criterios que ayudarán a elegir tanto un desarrollador comercial como móvil.



Problema de elección


En el mundo ya hay alrededor de cinco mil millones de teléfonos inteligentes, según diversas estimaciones, hasta el 80% de ellos usan el sistema operativo Android y menos del 20% usan iOS. Y, sin embargo, cada país tiene sus propias características, por ejemplo, en los Estados Unidos, más del 65% de los teléfonos inteligentes funcionan con iOS. Al crear aplicaciones móviles, a menudo se requiere lanzar versiones tanto en iOS como en Android. Para hacer esto, puede recurrir al desarrollo nativo o multiplataforma ("híbrido").

El desarrollo nativo es una solución clásica que requiere escribir aplicaciones para cada plataforma de forma individual, utilizando diferentes idiomas y teniendo en cuenta las características de cada plataforma. Al crear múltiples versiones de un proyecto, varios equipos trabajan simultáneamente.

Gracias a los marcos multiplataforma, fue posible "matar dos pájaros de un tiro" a la vez y preparar versiones para iOS y Android con una sola herramienta. Entre los marcos están especialmente extendidos:

- Reaccionar nativo de Facebook
para aplicaciones iOS, Android y Windows
usa el lenguaje JavaScript y la biblioteca React.js como la principal herramienta de desarrollo.

- Aleteo de Google
para aplicaciones de Android, IOS y Fuchsia (para más detalles, consulte nuestro artículo sobre Habré )
usa el lenguaje Dart, que también sirve para la programación web.


La popularidad de React Native y Flutter está creciendo, aunque a diferentes velocidades, según las estadísticas de Google Trends.

Desarrollo nativo


Tanto el desarrollo nativo como el multiplataforma tienen sus propias características. Utilizamos ambos enfoques en la práctica de la división móvil mobile.SimbirSoft. Entre las ventajas del desarrollo nativo están las siguientes:

  • operación estable y rápida de la aplicación;
  • vida útil máxima de la aplicación;
  • la aplicación es más flexible y escalable, gracias al uso de herramientas "nativas";
  • menos restricciones en arquitectura y características;
  • La interfaz coincide exactamente con la plataforma.

Desarrollo híbrido


Los marcos multiplataforma "personalizan" la aplicación para varios sistemas operativos, por lo que no es necesario crear elementos únicos para cada plataforma. Como resultado:

  • se necesitan menos especialistas;
  • toma menos tiempo y recursos;
  • La velocidad de desarrollo está aumentando.

Si la lógica de la aplicación es la misma en todas las plataformas y la interfaz es simple, el desarrollo híbrido ayuda a llevar el producto al mercado más rápido. Recomendamos marcos como React Native y Flutter en las siguientes condiciones:

  • si en poco tiempo necesita escribir una aplicación prototipo para varias plataformas;
  • si la aplicación toma toda la información del servidor, la lógica se implementa en el servidor y la animación y la interfaz no importan;
  • si se utiliza el número mínimo de características nativas, como notificaciones push, compras en la aplicación, geolocalización, etc.
  • si un rendimiento modesto es aceptable y el contenido se descarga de Internet.

Criterios de selección para nativo, nativo de reacción y aleteo


Para los negocios


1. Disponibilidad


Algunas empresas, cuando nos contactan para el desarrollo de aplicaciones móviles, señalan el costo como uno de los criterios más importantes para ellas. Al mismo tiempo, el costo y la necesidad de especialistas dependen del método de desarrollo.

Nativa

Como regla general, un estudio móvil tiene recursos suficientes para el desarrollo de aplicaciones nativas de cualquier complejidad.

Reaccionar nativo y revolotear

Hay menos especialistas en estas áreas en el mercado. Puede haber dificultades para desarrollar aplicaciones grandes.

Recomendamos tecnologías nativas a la empresa cuando la aplicación está diseñada para un funcionamiento a largo plazo (en otras palabras, "vida útil"). También es beneficioso si se necesita un alto rendimiento, una interfaz y animación complejas, bajo consumo de energía, integración con recursos de terceros (API, etc.). Las aplicaciones nativas son más rentables a largo plazo debido a los menores costos de soporte técnico.

Recomendamos tecnologías multiplataforma para pruebas de hipótesis rápidas, desarrollo de prototipos y aplicaciones con una clara limitación de la vida operativa, por ejemplo, desarrollada para ciertos eventos.

Memo para negocios:

para aplicaciones complejas: recomendamos el desarrollo nativo;
para aplicaciones simples: un híbrido.

2. Velocidad + coincidencia de tareas


El tiempo de comercialización está determinado principalmente por el tamaño del equipo disponible y las características de la aplicación móvil.

Trabajar con marcos multiplataforma puede ser más rentable y más rápido si la aplicación es simple, con la misma interfaz de usuario, sin detalles específicos de la plataforma, como el acceso a la cámara, trabajar con el sistema de archivos y huellas digitales, permisos de tiempo de ejecución. Aquí, el desarrollo híbrido ahorra tiempo al reutilizar casi todo el código y la interfaz de usuario para dos plataformas. Sin embargo, si necesita crear vistas personalizadas complejas, el desarrollo multiplataforma se ralentiza.

Hablando sobre el tiempo de desarrollo de una aplicación móvil, es importante entender que no existe un "término promedio para un hospital". Por ejemplo, en nuestra práctica lanzamos una aplicación móvil bancaria en 100 días, ahora estamos participando en el desarrollo adicional de este producto. Al mismo tiempo, había aplicaciones simples (tiempo de lanzamiento, aproximadamente dos semanas) y proyectos a gran escala con un período de desarrollo de más de un año.

3. Seguridad y perspectivas


Al elegir un idioma, es importante que una empresa evalúe hoy su confiabilidad y seguridad desde un punto de vista técnico, así como las perspectivas de un mayor desarrollo y los riesgos de obsolescencia.

En términos de confiabilidad, el desarrollo nativo está por delante de todos sus competidores. El desarrollo de las bibliotecas principales ha estado sucediendo durante varios años, la mayoría de los errores ya se han corregido en ellos, los lenguajes nativos, como Java, Objective-C, Swift, Kotlin, están en constante evolución. Entre los desarrolladores móviles, puedes escuchar opiniones de que en la década de 2020, el desarrollo nativo de Android será reemplazado parcialmente por Flutter, pero hasta ahora esto es solo una suposición.

React Native proporciona todas las herramientas para crear aplicaciones móviles seguras, por ejemplo, Skype, Instagram, Facebook y otros productos conocidos. Los problemas de seguridad solo son posibles cuando se utilizan módulos de terceros durante el desarrollo. Al mismo tiempo, JavaScript se está desarrollando activamente, se están lanzando nuevas funciones y, en el futuro previsible, el riesgo de obsolescencia es mínimo.

En el caso del desarrollo en Flutter, los riesgos son mayores, ya que el marco es joven, el lanzamiento se lanzó solo en diciembre de 2018. Hasta ahora hay problemas, por ejemplo, en un momento u otro, el ensamblaje de la biblioteca está disponible solo para una plataforma, se producen bloqueos en Android Studio, hay errores en algunos complementos y bibliotecas. Por otro lado, todo esto está siendo finalizado y corregido. No podemos excluir el riesgo de que Google deje de apoyar a Flutter, como sucedió con otros proyectos de la compañía. Sin embargo, Fuchsia OS está escrito en Flutter, en el que algunos desarrolladores ven un reemplazo para Android.

Para el desarrollador


Arriba, describimos los factores que tienen en cuenta tanto el negocio como el contratista. También hay criterios tecnológicos que se ocupan principalmente del gerente del proyecto. Por ejemplo:

- Nivel de conocimiento de lenguas nativas y preferencias de equipo.

Cada estudio móvil tiene sus propias preferencias en la elección de la tecnología. El desarrollo nativo requiere el conocimiento más completo de los idiomas respectivos. Sin embargo, debido al uso de herramientas nativas de los sistemas, existen menos restricciones y dificultades al personalizar o acceder a herramientas específicas de la plataforma (a diferencia de React Native y Flutter). Si tiene experiencia en JavaScript, un desarrollador móvil puede cambiar fácilmente a React Native (sin necesidad de aprender adicionalmente el lenguaje Dart, como es el caso de Flutter) o Dart (el conocimiento de TypeScript será una gran ventaja).

React Native utiliza módulos nativos bajo el capó. Como resultado, si hay una necesidad de personalización (y esto no es compatible de inmediato), es necesario trabajar con módulos nativos. Por ejemplo, en nuestra práctica hubo un caso en el que tuvo que personalizar la biblioteca Yandex.Maps para mostrar componentes visuales personalizados en el mapa.

Flutter, a diferencia de React Native, se destaca con su propio motor gráfico. Por un lado, esto le permite no tocar nativo en absoluto al desarrollar aplicaciones simples. Por otro lado, si necesita acceder a nativo, esto significa dificultades adicionales (por ejemplo, mensajes con tipos de datos elementales y JSON) y la imposibilidad de usar componentes gráficos de nativo.

- Umbral de entrada

Si el desarrollador decide aprender un nuevo idioma, la disponibilidad de la comunidad, así como la información de fondo y la documentación, se convierten en un tema importante.

Flutter y React Native evolucionan constantemente, tienen una comunidad profesional activa y buena documentación. Al mismo tiempo, el desarrollo nativo está por delante de los marcos, gracias a una comunidad más grande y más materiales de capacitación y foros, que describen los procesos de desarrollo de componentes complejos.

"Cheat Sheet" para la selección


La siguiente tabla comparativa ayudará a simplificar la selección y responderá a la pregunta en qué casos es este o aquel método de implementación adecuado (o no adecuado) para crear una aplicación móvil.



Recomendaciones


Si se elige a favor de los marcos, le recomendamos que preste atención a los siguientes aspectos del trabajo:

Calificación

Debe probar todas las plataformas involucradas (iOS, Android). Es importante evaluar objetivamente el nivel de conocimiento y experiencia de todos los participantes del proyecto para que la calificación en horas no se subestime. Considere el riesgo de errores en los marcos React Native y Flutter durante el desarrollo.

Diseño

Algunos elementos son difíciles (o incluso imposibles) de representar en Flutter o React Native. Por esta razón, el diseño debe ser acordado con los desarrolladores, y antes de que el cliente se enamore de una imagen bellamente dibujada.

CI / CD

En React Native, no se descartan problemas específicos con el autoensamblaje (por ejemplo, debido a la instalación de bibliotecas en diferentes plataformas). Necesidad de poner más reserva de riesgo.

Pantalla de bienvenida

La implementación de la pantalla de bienvenida en Flutter es más rápida que en React Native, donde este elemento solo se puede dibujar de forma nativa, con una alta probabilidad de errores. Cuando se usa React Native en una pantalla de inicio con todas las correcciones de errores y renderizado, es aconsejable dedicar más tiempo.

Diseño

Cuando se usa React Native, la composición tipográfica en iOS y Android debe realizarse simultáneamente para evitar problemas al adaptar los diseños para uno de los sistemas.

Desarrollo paralelo de web y móvil.

Si la versión web de la aplicación está escrita en React, se dedica menos tiempo a desarrollar una aplicación móvil en React Native, debido a la misma lógica de los componentes.

Depurar

Si la aplicación es grande, React Native facilita las pruebas y las pruebas unitarias. En Flutter, debe dedicar más tiempo a la corrección de errores, ya que los registros no son informativos.

Aplicación de trabajo con archivos del sistema

Es necesario solicitar permiso para la tarjeta SD, mientras que no es posible obtener un nombre y una ruta con cada archivo. Para enviar un archivo, debe usar ContentResolver. Para minimizar los riesgos, disponga de tiempo para todas las operaciones relacionadas con el sistema de archivos.

Entrega de montajes al cliente.

No hay diferencias significativas con respecto al desarrollo nativo, puede elegir cualquier servicio conveniente: Crashlytics, TestFairy, TestFlight.

Reaccionar nativo contra revoloteo


En SimbirSoft usamos React Native y Flutter, dependiendo de la naturaleza de la aplicación. Compartimos varias observaciones de nuestra práctica que ayudan a proporcionar las características de trabajar con un marco particular.



Para resumir


El desarrollo de aplicaciones móviles nativas e híbridas tiene sus ventajas y desventajas, que la empresa y el contratista tienen en cuenta al elegir una tecnología. Entre los criterios más importantes están el tiempo y el costo del desarrollo y mantenimiento, el cumplimiento de la tarea, la seguridad y las perspectivas, el nivel de desarrollo de la comunidad. Según su experiencia, un desarrollador móvil ayuda a elegir la mejor solución para cada aplicación específica. Esperamos que nuestros criterios y tabla de comparación le hayan sido útiles. Gracias por su atencion!

Source: https://habr.com/ru/post/460030/


All Articles