Nuestra experiencia en desarrollo de Android e iOS en el proyecto / Sudo Null IT News

Veamos la situación actual con los desarrolladores de aplicaciones para Android e iOS. Analicemos las opciones para desarrollar aplicaciones móviles. Averigüemos cómo estamos en una startup. LLAVE NFC Estamos trabajando en esta dirección. Veamos las características que surgen en relación con las condiciones de una startup y el tema IoT del proyecto. Respondamos a la pregunta: “¿Es difícil volver a capacitarse e ingresar al campo del desarrollo móvil?”

El artículo está escrito específicamente en un lenguaje sencillo.donde se explican muchas cosas en detalle para que el material sea comprensible para todos y dé una idea del campo en su conjunto, y no solo de los entresijos del desarrollo.

la tarea principal artículos – para explicar las características clave del desarrollo móvil para principiantes y para personas con experiencia – para compartir las dificultades de ingresar al campo de los dispositivos móviles y las posibles direcciones en él. Usando las funciones de nuestra aplicación como ejemplo, demostraremos qué problemas se resuelven en el desarrollo móvil.

¿Quiénes somos y qué somos?

Esta no es la primera vez que escribimos artículos, para que puedas leer en detalle sobre nuestro proyecto y equipo. Aquí. En definitiva, creamos cerraduras inteligentes con un nuevo enfoque.

En este artículo analizaremos nuestro enfoque para el desarrollo móvil utilizando Android e iOSy en el próximo artículo, que se publicará la próxima semana, – servidor API. Compartiremos las características que surgen en relación con las condiciones de inicio y el tema del proyecto, y también hablaremos sobre las decisiones que tomamos durante el desarrollo.

Parte del material será escrito por los propios desarrolladores para transmitir con mayor precisión las dificultades y las formas de resolverlas. Todo esto te permitirá sumergirte más profundamente en el proceso.

Conozcámoslos:

Sergey es un desarrollador de iOS. Alegre, con peculiaridades propias de trabajo, pero con un estricto acercamiento al código. Por cierto, antes de nuestro proyecto tenía muy poca experiencia trabajando con iOS, por lo que su visión y experiencia serán extremadamente valiosas para los principiantes que estén pensando en ingresar a este campo.

Nikita es una desarrolladora de Android. Un pesimista que casi nunca incumple una fecha límite. Él, al igual que Seryozha, tampoco tenía mucha experiencia en el desarrollo móvil, pero lo dominó y realiza incluso tareas extremadamente complejas con éxito.

Ambos chicos anteriormente tenían alrededor de dos años de experiencia en desarrollo en lenguajes tipo C.

¿Por qué necesitas una aplicación?

Aplicación movil – esta es tu clave para el cliente. Esta puede convertirse en una de sus principales ventajas en comparación con sus homólogos. Por ejemplo, ponemos gran énfasis en UX/UI y ya hemos implementado una gran cantidad de funciones que pueden desbloquear todo el potencial de una cerradura inteligente. Escribimos sobre qué funcionalidad específica estamos desarrollando y por qué es necesaria en nuestro canales TG a medida que lo probamos y refinamos, y a menudo consultamos con nuestros lectores.

Por cierto, si quieres aportar tu propia visión al proyecto, hemos creado pequeña encuestacuyos resultados servirán de base para el desarrollo y la promoción.

Desarrollar una aplicación móvil – no es una tarea fácilque se puede abordar de diferentes maneras:

1. Desarrollo multiplataforma. Flutter y React Native para empresas es la forma más sencilla de desarrollar una aplicación para ambas plataformas a la vez. React Native para el desarrollo móvil es ahora especialmente popular en la Federación Rusa. Dado que está basado en JavaScript, no le tomará mucho esfuerzo a un desarrollador web ocasional ingresar al desarrollo móvil. Por esta razón, será mucho más fácil encontrar personas para ese puesto.

2. Desarrollo nativo para cada plataforma por separado. Esto requiere desarrolladores independientes en Android e iOS, pero brinda control total sobre todas las funciones y herramientas de desarrollo. En Android el desarrollo humano es mucho más fácil de encontrar, ya que suele utilizar Java o Kotlin, que mucha gente conoce, por lo que hay bastante gente capaz de trabajar con él. Con iOS la situación es la contraria. Aunque Swift tiene algunas similitudes con lenguajes tipo C, de hecho, será necesario aprender muchas cosas desde cero, razón por la cual hay muy pocos buenos desarrolladores. El problema se complica porese desarrollo será más productivo y conveniente con XCode, un entorno de desarrollo integrado disponible solo para el sistema operativo macOS. Como puedes imaginar, no todo el mundo puede permitirse un dispositivo de este tipo de Apple. Pero intentar implementar algo como esto a través de una máquina virtual es una idea dudosa.

Puedes discutir los pros y los contras durante mucho tiempo, profundizando en cada detalle, pero siempre todo se reduce a la velocidad y el costo del desarrollo. Y aquí está claro que gana el desarrollo multiplataforma. Pero ¿por qué desarrollamos todo de forma nativa en este caso?

De hecho, todo es tan banal, pero influyó en esto. 2 factores:

  1. Factor histórico. Sucedió que al organizar el equipo, rápidamente encontramos un desarrollador tanto de Android como de iOS, pero durante mucho tiempo no pudimos encontrar un desarrollador de Flutter/React Native.

  2. Seguridad y confiabilidad. En el caso de nuestro desarrollo, utilizamos el módulo NFC en el teléfono. Lo que se necesita aquí es seguridad y control directo del funcionamiento del smartphone en este momento. Por eso, “por si acaso”, se optó por un desarrollo nativo, ya que, por ejemplo, el iPhone trabaja con este módulo de forma extremadamente cerrada. Por temor a problemas en la fase inicial, se tomó esta decisión.

Desarrollo de Android y sus características.

Siguiente Nikita:

“ Comencé a trabajar en el proyecto creando diseños xml., basado en el diseño proporcionado en Figma. Esta etapa fue esencialmente una experiencia nueva para mí, ya que hasta ese momento no había trabajado de lleno en la creación de frontend para aplicaciones móviles, sino que me especializaba en desarrollo backend en Java. Trabajar con XML supuso un desafío, porque el hábito formado era para tareas completamente diferentes.

dándose cuenta de que Los dispositivos móviles tienen una amplia gama de tamaños de pantalla.resoluciones y densidades de píxeles, decidimos incluir en el proyecto desde el principio diseños responsivos. Que es esencialmente la única decisión correcta a la hora de desarrollar. La falta de un diseño adaptable puede llevar al hecho de que incluso los diseños XML perfectamente reproducidos pueden diferir significativamente en la presentación visual en diferentes teléfonos.

Como ejemplo de diseño adaptativo Puedo darte trabajo con tarjetas. Para formar estas tarjetas utilicé VerPager2 y creé una plantilla Vista de tarjeta, que se ajustaría a datos diferentes. Estas tarjetas tenían varias líneas que indicaban cantidad o ausencia/presencia. Para la solución, inicialmente oculté algunas líneas y las mostré si era necesario configurando visible mediante adaptador. Después de configurar esta parte, me di cuenta de que en dispositivos con pantalla pequeña, las tarjetas no encajan y cubren el resto del contenido de la pantalla. Para hacer esto, establecí pautas para Ver paginador. Después de esto, resultó que si había muchas líneas en la tarjeta y la pantalla era pequeña, no cabía todo el contenido.

La solución fue usando personalizado AlturaMáximaDesplazamientoVer, porque establecer la altura máxima para Vista de desplazamiento por alguna razón no es posible. En este caso, la capacidad de desplazarse no era intuitiva. Corregí esta situación agregando degradados en la parte superior e inferior. Vista de desplazamiento. Los colores inicial y final del degradado se especificaron en el formato #AARRGGBB, donde AA denota el canal alfa (nivel de transparencia) y RRGGBB es el valor del color en formato RGB. Comprobé en el adaptador si el contenido encajaba. Vista de desplazamiento completamente en el área visible sin necesidad de desplazarse. Si no es necesario desplazarse, los degradados se vuelven invisibles. Para cambiar dinámicamente la visibilidad de los degradados, instalé un detector de desplazamiento. El degradado superior se vuelve visible tan pronto como el usuario comienza a desplazarse hacia abajo (desplazarseY > 0). La visibilidad de la parte inferior se controla comprobando la posibilidad de un mayor desplazamiento vertical utilizando puede desplazarse verticalmente (1).

holder.topGradient.setVisibility(scrollY == 0 ? View.INVISIBLE : View.VISIBLE);

holder.bottomGradient.setVisibility(holder.scrollView.canScrollVertically(1) ? View.VISIBLE : View.INVISIBLE);

Resultado (en la primera pantalla la aplicación se inicia específicamente en un dispositivo con pantalla pequeña)

Quizás esta solución le parezca útil a alguien 🙂 Me alegrará ver opciones de implementación más prácticas en los comentarios.

Actualmente nuestra aplicación está escrita en Java. Antes de comenzar a trabajar en este proyecto, tenía mucha experiencia trabajando con Java. Pero no tenía experiencia trabajando con Kotlin, por lo que inicialmente elegí Java, ya que el proyecto necesitaba comenzar a desarrollarse rápidamente para que el MVP pudiera mostrarse a los expertos en las competiciones y a los inversores.

Kotlin al menos ofrece una sintaxis más moderna en comparación con Java, lo que hace que el código sea más fácil de leer y escribir. Kotlin también tiene muchas características modernas, como rutinas para programación asincrónica, que Java no tiene. Además, Java puede ser más lento que Kotlin en algunos casos. Considerando las ventajas de esto último, en un futuro próximo mi tarea será abordar transfiriéndole el proyecto por completoincluso si lleva mucho tiempo.

Trabajar con API de Android

En el desarrollo de aplicaciones móviles, la interacción API juega un papel clave, ya que permite que las aplicaciones intercambien datos en tiempo real. Para una integración exitosa y una comunicación efectiva con el servidor, elegí Retroadaptación en combinación con OkHttpClienteproporcionando así un mecanismo potente y flexible para trabajar con la red.

Retrofit destaca por su alto nivel de abstracción, proporcionando una interfaz conveniente para enviar solicitudes HTTP y procesar respuestas. Esto simplifica enormemente el desarrollo al permitirle definir solicitudes de red mediante anotaciones y convertir automáticamente las respuestas JSON en objetos Java. OkHttpClient sirve como base fiable para Retrofitque ofrece capacidades avanzadas para personalización de consultas, almacenamiento en caché y reintentos.

Veamos otras opciones disponibles. Por ejemplo, Volley de Google ofrece herramientas de procesamiento de imágenes y consultas de red fáciles de usar que están optimizadas para una interacción rápida y eficiente con el servidor. Sin embargo, es posible que Volley no sea la mejor opción para trabajar con grandes cantidades de datos. Para aplicaciones Kotlin, existe Ktor, que es una biblioteca asincrónica moderna creada específicamente para Kotlin. Ktor es ideal para programación asincrónica utilizando corrutinas y permite configurar fácilmente las partes cliente y servidor de la aplicación, gracias a su modularidad y peso ligero.

Para minimizar riesgosDebido a las amenazas internas, es importante gestionar cuidadosamente los derechos de acceso a los sistemas y datos. Los usuarios deben tener sólo los derechos de acceso que necesitan para realizar sus funciones, evitando el acceso innecesario a sistemas críticos.

Nikita aprendió rápidamente sobre desarrollo móvil gracias a su conocimiento y experiencia. Por lo tanto, si desea volver a capacitarse en desarrollo móvil, pero no tiene mucha experiencia en el desarrollo de Android, puede intentarlo usted mismo con seguridad. El proceso de reentrenamiento es simple.

Pero es importante aprovechar los conocimientos existentes. Quizás sea más fácil dedicarse al desarrollo multiplataforma, donde claramente habrá más vacantes.

Si estás en camino de elegir una dirección, entonces el desarrollo de Android no es básicamente más difícil que cualquier otro. Hay sutilezas y dificultades, como en todas partes.

Desarrollo en iOS y sus características.

Siguiente Sergey:

Entré en el desarrollo de iOS de forma bastante espontánea, así que tuve que aprender cosas nuevas sobre la marcha. Todavía no me he convertido en un gurú de las aplicaciones Swift, así que sólo escribo sobre las mías. experienciaque se ha acumulado durante este tiempo y sobre el que hay algo que contar.

Actualmente existen dos marcos principales para desarrollar interfaces de usuario: UIKit y SwiftUI.
UIKit – probado en el tiempo, bien estudiado.
Interfaz de usuario rápida – al contrario, es nuevo y no tan bien estudiado =D.

También existen diferencias entre los enfoques de desarrollo. Puedes leer más detalles, por ejemplo, Aquí.

Incluso el líder Yandex recomienda el conocimiento de UIKit para los alumnos, no de SwiftUI.

Esto no significa que SwiftUI sea malo, pero más bien habla de su prevalencia en la Federación de Rusia.. Pero, por ejemplo, ya se utiliza en empresas occidentales.

La idea principal a la hora de elegir era acelerar el desarrollo y delegar algunas funciones directamente a la máquina, para no volver a prescribir algunas plantillas. El umbral de entrada a SwiftUI es más bajo y los primeros resultados aparecerán antes, por eso lo elegí. Entonces, para un principiante, esta es una opción más simple del desarrollo nativo para iOS, pero aquí en Rusia habrá menos vacantes.

Ir directo a la batalla

Durante los primeros días de desarrollo, la interfaz de usuario funcional del primer prototipo de aplicación estuvo casi completa. Si divide el diseño en capas y busca coincidencias horizontales o verticales en ellas, entonces el trabajo es muy sencillo y rápido. Lo que se debe hacer horizontalmente, lo escribimos en VStack, lo que se debe hacer verticalmente, en HStack. A veces es necesario combinar esto.

SwiftUI tiene una gran cantidad de plantillas prediseñadas:

  • lista con barra de desplazamiento,

  • enlaces con transiciones a otras ventanas,

  • Varias acciones de toque utilizadas en aplicaciones estándar de Apple. Son muy fáciles de usar y se integran perfectamente en la aplicación.

Swift es extremadamente rápido. MUY Es agradable ver cómo su aplicación literalmente vuela sin frenos ni retrasos. Todos los menús se abren instantáneamente y las animaciones de transición suave son agradables a la vista.

Pero entonces comenzó la escritura de la lógica…

Preguntas constantes acceder a GPT con sus respuestas a menudo aleatorias, videos en YouTube y ver los repositorios de programadores consumados; en mi situación, es como una lotería. A veces encuentras el enfoque o las herramientas adecuadas de inmediato y, a veces, ni siquiera sabes cómo generar una solicitud. Una vez más, no tenía a nadie a quien preguntar qué sería lo mejor que podía hacer en tal o cual situación, ya que los desarrolladores de SwiftUI estaban llorando.

También estropea que la propia Apple no comente cómo diseñar mejor una aplicación. Por ejemplo, el patrón MVVM es ideal para UIKit. El uso de MVVM en SwiftUI a menudo parece redundante y desea descartar el vínculo intermedio en la relación entre Modelo y Vista, apegándose a algo similar al patrón MV.
Quizás personas más experimentadas hayan decidido por sí mismas sobre este tema, por lo que esperaré comentarios al respecto.

A veces quieres hacer rápidamente algún tipo de prototipo funcional.para ver cómo se verá y funcionará. Por ejemplo, mostrar información del usuario. Primero en una pantalla, luego en otra. O comprobar que la información que cambia en una pantalla cambiará en otra. Viniendo del mundo C++, pensé que había algún tipo de analogía con una variable global. Bueno, simplemente creemos algo global para la prueba y luego haremos algo más inteligente 🙂

En SwiftUI no puedes simplemente convertirte en una variable global. Existe el concepto de contenedor de propiedad. Este es un modificador de variable que dice que tiene algún propósito. Por ejemplo, @State rastrea cualquier cambio en una variable. La variable Estado describe un determinado estado de la pantalla en ese momento (puedes estudiar con más detalle Aquí).
Entonces, para hacer un análogo de una variable global para varias pantallas, debemos usar el patrón “observador”, pero con una “muleta”.

Crearemos una clase con la capacidad de ser vista, luego crearemos el elemento en sí en alguna pantalla superior y luego lanzaremos la instancia a la pantalla secundaria.

class UserProgress: ObservableObject {
    @Published var score = 0
}

struct InnerView: View {
    @ObservedObject var progress: UserProgress

    var body: some View {
        Button("Increase Score") {
            progress.score += 1
        }
    }
}

struct ContentView: View {
    @StateObject var progress = UserProgress()

    var body: some View {
        VStack {
            Text("Your score is \(progress.score)")
            InnerView(progress: progress)
        }
    }
}

Ejemplo tomado de aquípuedes estudiar con más detalle.

Trabajar con API

Describen breve y parcialmente:
Por un lado, obtenemos de fábrica un mecanismo para codificar y decodificar datos hacia/desde JSON y otros formatos, funciones integradas para enviar solicitudes y verificar errores de ejecución.

¿Esto ayuda mucho? – Sí.

¿Cuántas células nerviosas gastarás hasta que comprendas todas las complejidades? – Mucho.

Línea de fondo

Mirando hacia atrás, ¿comenzaría a aprender a usar SwiftUI ahora o es mejor UIKit? – Aun así, me pondría del lado de SwiftUI.

Me parece que UIKit requiere mucho más esfuerzo para comenzar, y en nuestro proyecto esto juega un papel clave. A pesar de las desventajas que describí anteriormente, SwiftUI es una herramienta muy poderosa, pero al mismo tiempo bastante caprichoso. Su velocidad es impresionante: los ingenieros de Apple han hecho un gran trabajo de optimización. Debido a la falta de experiencia, algunos momentos no siento, por lo que por costumbre me pego un tiro en el pie.

Al mismo tiempo, es importante comprenderque UIKit es más popular en Rusia y muchas empresas lo desarrollan. Si desea elegir la dirección del desarrollo nativo de iOS para grandes empresas, creo que elegir UIKit será una mejor decisión.

Una característica interesante y su desarrollo.

Un ejemplo de estocómo nuestro enfoque nos permitió implementar algo nuevo para el ámbito:

En nuestra aplicación puedes controlar a la vez un número casi ilimitado de cerraduras con su agrupación y configuración. Después de agregar el segundo o posterior bloqueo a su cuenta, aparecerá inmediatamente en la pantalla principal. En este caso, será posible seleccionar uno de ellos de forma predeterminada; se utilizará inmediatamente tan pronto como abra la aplicación. Digamos que tienes un apartamento y una casa de campo. Esta función está diseñada para que usted, al tener varias cerraduras, no tenga que hacer un clic adicional constantemente para seleccionar la cerradura que desea abrir.

Si usas tus cerraduras con la misma frecuencia, entonces no es necesario seleccionar un bloqueo predeterminado. En este caso, se recordará el último candado utilizado y, en el momento adecuado, podrás cambiarlo por otro con un solo clic. Esto también se hace para reducir los clics innecesarios para abrir.

Al mismo tiempo, podrá controlar sus cerraduras de forma cómoda y remota. En el menú “Acceso” puede seleccionar el bloqueo deseado y cambiar la configuración de acceso. Además, aquí podrás ver tu historial de navegación.

Además, Si Se le ha dado acceso a cualquier cerradura de nuestra empresa, aparecerá en su aplicación. Es decir, al ponerle un candado a toda tu familia, las llaves físicas desaparecerán de tu vida.

También puedes dividirlos en grupos para facilitar el trabajo con varios candados. Todas las llaves de las puertas pueden estar en su teléfono y no tendrá que pensar qué llave es para cada cerradura: será intuitivo. Una función similar, por ejemplo, permitirá a los propietarios gestionar varios apartamentos a la vez sin “muletas” ni inconvenientes adicionales”.

A primera vista, la tarea no parece tan voluminosa, pero para implementarla fue necesario elaborar especificaciones técnicas para la funcionalidad necesaria, pensar en la UX/UI, diseñar una base de datos del lado del servidor para un control de acceso claro, teniendo en cuenta la jerarquía de roles, y solo después de eso implementar y probar de manera integral todas las funciones restantes.

Y todas esas funciones complejas… Esto es mucho trabajo de más de una persona, pero el sistema integrado ayuda a hacerlo de forma optimizada y rápida. Y las frutas, a su vez, no pueden dejar de deleitarnos cuando comparamos nuestro producto con sus análogos en el mercado.

Entonces desarrollo móvil en el campo IoT – No se trata de aplicaciones de plantilla con un par de funciones, sino de un trabajo sumamente interesante e intenso con sus propias sutilezas. Al menos para nosotros.

Conclusión

Resumiré brevemente los resultados a los que nosotros mismos llegamos con el equipo, habiendo recorrido ya un camino bastante serio y preparándonos para la publicación de solicitudes:

  1. Desarrollo móvil – No es fácil, pero tampoco tan difícil como podría parecer a primera vista. Al mismo tiempo, tenga en cuenta que el mercado de desarrolladores en la Federación de Rusia es extremadamente escaso en esta dirección. Un desarrollador inteligente es muy caro o ya está ocupado. Y esto se aplica tanto al desarrollo nativo como al multiplataforma (aunque React Native ahora se está desarrollando activamente).

  2. IoT es un campo de rápido crecimiento, que pronto rodeará no sólo a los amantes de la tecnología inteligente. Se desarrollará ampliamente en todos los lugares, tanto en viviendas públicas como privadas. Bombillas inteligentes, cortinas, hervidores y, por supuesto, cerraduras: todo esto ya empieza a formar parte de la vida cotidiana de muchas personas. Las ventas de altavoces inteligentes de Yandex han alcanzado la marca de los 7 millones. Y cuanto más se desarrolla esta área, más complejo se vuelve su desarrollo y requiere más especialistas.

Y lo más importante, por supuesto, es la organización de una cadena de desarrollo lógica clara. Exactamente el objetivo correcto y personas competentes, quien la entiendepuede crear un producto verdaderamente excepcional.

El secreto del éxito es la coherencia del propósito.
Benjamín Disraeli

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *