¿Por qué es 10 veces más difícil de desarrollar en iOS que en Android?

Si alguien te lo dijo, entonces obviamente mintió.

¿Por qué diría tal cosa? Tanto para Android como para iOS, en lo que a mí respecta, tiene la misma cantidad de complejidad y son muy similares en muchos aspectos. No tiene que preocuparse de que uno sea 10 veces (muy exagerado) más duro que el otro.

Demostraría esto creando un UITableView en iOS y un RecyclerView en Android. Los elegí para la demostración, ya que se usan en casi todas las aplicaciones de una manera u otra.

UITableView en iOS:

Haz tu clase de modelo:

Haga que UITableViewCell, esta sea su vista:

Haga su controlador, ese es el UIViewController

Obtenga los datos de un servidor, usé Firebase para esto y escribí el código en la clase Controller. Podría haber usado una clase diferente para esto, pero para esta pequeña vista previa, esto también funciona.

Storyboard:

El resultado resultante fue este:

Ahora, puedo hacer lo mismo en Android

La clase de modelo:

El adaptador que se utiliza para proporcionar el RecyclerView

El diseño de la celda se ve a continuación:

Como habrás notado (si realmente lees el código), hay una referencia a una clase llamada Commons. Es una clase que uso para hacer algunas tareas básicas. Para este proyecto, los Comunes se veían así:

Y finalmente, la actividad se realizó de la siguiente manera:

Y el xml de la Actividad se veía así:

Y el resultado que obtienes es muy similar al que obtuvimos en iOS:

No se trata solo del resultado, la complejidad de la implementación está más o menos al mismo nivel y no hay razón para culpar que uno sea 10 veces más difícil que el otro. No tiene ningún sentido hacer un reclamo de ese tipo.

Y ahora, dado que la pregunta es sobre la dificultad de implementar AutoLayout (que en realidad es bastante fácil), implementaré dos diseños bastante difíciles tanto en Android como en iOS.

Así es como se ven las restricciones en el Storyboard:

No afirmo que esta sea una manera favorable de implementar el diseño automático en una aplicación de producción donde el contenido es muy dinámico. El enfoque utilizado para abordar dicho diseño es completamente diferente.

Este es el diseño XML en Android:

Y el resultado final de los diseños de Android e iOS es el siguiente:

Entonces, si cree que hay un problema con el desarrollo de iOS y AutoLayout en particular, con gusto puedo informarle que está equivocado.

También me gustaría abordar algo que dijo Valerio Cietto en la sección de comentarios.

Los píxeles independientes de la densidad realmente no funcionan de la forma en que Google lo anuncia. Todavía es una medición independiente de la densidad y hace que la creación del diseño en Android sea mucho más fácil.

Pero,

Los FrameLayouts de color gris oscuro tienen 300dp de ancho y 50 dp de altura. Todavía se verían diferentes en diferentes dispositivos. Sí, este es un caso extremo, pero aún existen diferencias sutiles si se da el ancho y la altura de una vista en mediciones dp. tampoco es así como Google quiere que los uses. Admito que tener mediciones dp para trabajar hace que la tarea sea mucho más simple cuando se trata de diseños de iconos del sistema y muchas otras cosas.

Acerca de cómo se manejan los eventos táctiles en iOS y Android:

iOS:

Los tres métodos utilizados aquí son,

  • IBAction usando arrastrar y soltar para el botón uno
  • Usando addTarget para el Botón Dos
  • Usando un TapGestureRecognizer para la vista rosa.

donde como usa Android:

  • Agregar un OnClickListener para su TexView, Button, etc.
  • Al agregar un onClick a su Vista / Botón, etc. en el XML y al implementar el mismo método que especificó en el XML, en la Actividad principal. Esto usa una Vista como parámetro, que es la clase principal de todo lo que puede usar en el XML.

Sin embargo, no veo un cambio drástico en ninguno de estos.

Descargo de responsabilidad: Todas las imágenes (sin incluir los códigos) utilizadas en esta respuesta son imágenes de dominio público de pixabay.com, excepto la imagen de Hyderabad. No sé a quién pertenece esa imagen.

Todos los códigos utilizados en la respuesta anterior están escritos por mí para responder a esta pregunta.

Para mí, parece que tanto Android como Apple intentaron reinventar CSS, con un éxito mixto.
He comenzado desde el punto neutral de un desarrollador web, donde obtener páginas receptivas requiere un poco de esfuerzo, pero es manejable si tienes una buena técnica.

Luego traté de hacer una aplicación multiplataforma, pero debido a las limitaciones de hardware (el bluetooth Phonegap no funcionaba) tuve que hacer dos prototipos, uno en Android Studio y el otro usando Xcode.

Ambos tienen:

  • un botón “ejecutar e instalar”.
  • Un emulador.
  • todas las bondades que esperarías en Eclipse o Netbeans.
  • interactivo lo que ves es lo que obtienes editor de interfaz
  • vista previa en tableta y teléfono al mismo tiempo.

Entonces, desde el punto de vista del principiante, ambos son fáciles de la misma manera. Ok, hay algunas diferencias, por ejemplo, Apple tiene muchos menos dispositivos para probar, mientras que Android tiene una gran variedad, pero los tamaños de pantalla son en su mayoría iguales.

Luego, cavando en las API, comencé a ver cómo ambos parecían estar en guerra fría el uno con el otro, llamando al mismo elemento de interfaz de usuario de diferentes maneras.

Además, la forma en que se recopila la entrada es diferente cuando se realiza mediante programación. Comenzando desde el punto de vista del desarrollador web, encuentro Android más sensato, pero si está más familiarizado con Apple, Xcode puede tener más sentido.

Entonces, para mí no es de extrañar si un desarrollador de Android encuentra que los kits de interfaz de usuario de Apple son duros o diabólicos, o viceversa.

Aunque no hay duda de que un desarrollador puede superar todas estas reglas arcanas e insensatas para hacer que algo funcione.

He escrito aplicaciones para Android e iOS; ninguna plataforma es perfecta, por supuesto, y son diferentes. Ambos tienen desafíos y ambos tienen áreas que son un poco más fáciles, pero no es mucho más difícil de desarrollar para uno u otro.

  • Ambos tienen codificaciones de diseño XML, Android se siente un poco más legible, pero eso es principalmente porque tienes que leerlo, los usuarios de Xcode tienen más probabilidades de apegarse a las herramientas visuales. Puede construir la interfaz con código puro si lo prefiere.
  • Swift es un lenguaje más moderno que Java, pero Kotlin ayudará a acercar Android, y Objective-C se siente más arcano que Java para algunos.
  • Android tiene más estructura para el código de control; Actividades, intenciones, fragmentos, servicios y adaptadores en su mayoría contra UIViewControllers y cualquier abstracción que agregue usted mismo.
  • La localización en iOS está bien conectada a las herramientas visuales, la localización de Android ofrece un poco más de flexibilidad.
  • etc.

Si te enfocas en algunas de esas diferencias y tienes experiencia o preferencias pasadas que hacen que uno de los dos parezca más fácil o mejor, no sería difícil terminar sintiendo que el otro es mucho más difícil, pero en su mayoría son solo diferente.

Si bien ninguna de las plataformas es perfecta, estoy sinceramente sorprendido de que tengas dificultades en el lado de iOS. Swift no es un lenguaje complicado de aprender. En Touchtap Utilizamos exclusivamente Swift para proyectos de iOS. No sé si diría que Swift es el idioma más fácil de aprender, pero diría que Swift es uno de los idiomas más accesibles.

Si ya estaba familiarizado con Java, la programación de Android probablemente le resulte mucho más natural. A veces experimentamos lo contrario con los proyectos de Android debido al hecho de que hay muchos tipos diferentes de teléfonos Android que ejecutan diferentes sistemas operativos. Creo que eso es probablemente lo único que hace que iOS sea más fácil.

Si bien hacemos desarrollo nativo de iOS y Android, hemos descubierto que el desarrollo de Android a menudo puede tomar más tiempo y costar más debido a tantas plataformas. De hecho, escribimos un blog al respecto: ¿el desarrollo de Android es más costoso que iOS?

¿Has pensado en obtener ayuda? Quizás compre una suscripción a Treehouse o algo así para ayudarlo con sus problemas específicos. Tienen un excelente plan de estudios y también puedes buscar para encontrar temas específicos.

Puedo hablar con autoridad: he escrito aplicaciones para Android e iOS. Y odio la programación de iOS.

La razón está relacionada en gran medida con las políticas draconianas de Apple. Tengo que saltar por tantos malditos aros solo para que mi aplicación entre en su bendita App Store. Tengo que joder con perfiles y certificados y compilaciones y archivos especiales de Xcode. Me da dolor de cabeza solo de pensarlo.

Xcode en sí es un trabajo. ¡Qué horrible IDE laberíntico! Todavía no entiendo completamente cómo usar esta monstruosidad. En comparación, Android Studio (que se deriva de IntelliJ) es un placer de usar.

No estoy seguro de qué te da esta idea para ser honesto. Por otra parte, no he escrito nada de forma nativa en iOS, por lo que realmente no sé sobre eso. Para mí, la “forma nativa” de crear aplicaciones de Android usando esos diseños XML realmente apesta, en mi opinión, que todo el sistema es muy defectuoso y muy difícil de usar debido a algunos, en mi opinión, importantes descuidos de diseño en ese sistema.

Debido a eso, opté por utilizar Unity Engine para construir mis aplicaciones. En mi opinión, es mucho más fácil construir casi cualquier cosa usando eso. Sin embargo, lo que es relevante para su pregunta es la capacidad de construir para una variedad de plataformas usando Unity.

Mira esta aplicación como un ejemplo:

Idle Miner Tycoon – Aplicaciones de Android en Google Play

Lo creé en Unity y lo construí para Android. Sin embargo, también podría haberlo construido para iOS, habría sido el mismo proceso casi exacto, con la única diferencia de que el resultado sería instalable en dispositivos iOS, no en Android. Si tiene esa idea porque muchas aplicaciones son solo para Android y solo unas pocas están disponibles en ambos sistemas, entonces la respuesta es bastante fácil de por qué:

Solo obtendrá mis aplicaciones para dispositivos Android, porque con Play Store se le cobra 25 $ una vez para configurar su cuenta de desarrollador, sin embargo, puede probar y depurar su aplicación sin eso. Con Apple, se le cobra una tarifa anual / mensual (no estoy seguro de eso) para mantener su cuenta y no puede realizar las pruebas correctamente sin eso, y también es una tarifa significativa, algo así como 100 $ o algo, absolutamente ridículo y completamente al revés. Pero bueno, esa es Apple para ti, supongo.

No es mas dificil.

Por lo que puedo decir, la mayoría de los desarrolladores que trabajan en ambas plataformas se quejan más sobre Android y el pobre conjunto de herramientas.

Sospecho que para algunos, la forma de hacer las cosas de Apple es diferente . iOS no es un clon de un sistema operativo de escritorio. Está restringido deliberadamente para que sea apto para los consumidores.

Y esto se interpreta como más difícil.

Pero debe tenerse en cuenta que la mayoría de las aplicaciones principales aparecen primero en iOS.

Cuando crea algo para una audiencia global de millones y necesita dar cuenta de los miles de dispositivos Android, tamaños de pantalla, especificaciones, tenedores y versiones diferentes, volverá a esta pregunta y se preguntará por qué no pudo He visto el panorama general antes.

La curva de aprendizaje para las restricciones es muy empinada, es probable que sea la única área de desarrollo de iOS que realmente he tenido que ‘estudiar’ para hacerlo bien, al principio también era bastante defectuoso.

Sin embargo, aparte de eso, la cadena de herramientas Swift / UIKit es excepcional, y creo que la mayoría de los desarrolladores profesionales estarían de acuerdo, es significativamente mejor que Android.

Sin embargo, es bastante diferente , por lo que solo necesita un poco más de paciencia, aunque vale la pena.

Como siempre, cuando sabes algo es fácil, cuando no sabes que es difícil. Probablemente tenías algún conocimiento previo que hizo que aprender Android sea fácil para ti.

More Interesting

¿Por qué Apple no usa Swift en iOS?

¿Cuándo se llama al método textFieldShouldClear?

Cómo actualizar mi iOS 7 a iOS 9

Si ya escribo aplicaciones de iOS, ¿cuánto tiempo llevará aprender el desarrollo básico de Android? ¿Valdría la pena que?

¿Qué necesito saber antes de comenzar a aprender la programación de iOS?

C # (lenguaje de programación): ¿Puedo crear aplicaciones de Apple / Android usando C #?

¿Cuánto costó desarrollar las aplicaciones móviles para MyFitnessPal?

¿Qué son las empresas que cuentan con equipos scrum que ofrecen funciones de consumidor en tres plataformas (iOS, Android y la web), así como los servicios de soporte de back-end?

¿Cómo se implementa / maneja generalmente la creación y administración de cuentas de usuario en aplicaciones iOS ya que no parece haber ningún soporte incorporado?

Con respecto a la subcontratación, ¿cómo podríamos obtener proyectos de desarrollo de software, principalmente desarrollo de aplicaciones móviles en Android, iOS, PhoneGap y Titanium de EE. UU., Reino Unido y Europa?

¿Cuál es su opinión sobre Objective-C (lenguaje de programación)?

Objective-C (lenguaje de programación): ¿Cómo explica la estructura de argumento impar de NSStringWithFormat, en la que se proporcionan más argumentos después de una coma?

¿Por qué el código Swift se compila tan lentamente?

¿Cómo ayuda CS107 en Stanford a aprender el material de CS193P? ¿Es posible aprovechar al máximo CS193P completando solo 106A y 106B? ¿Cuáles son las otras habilidades de CS que se exigirán cuando uno ingrese al desarrollo de aplicaciones para iPhone?

¿Cuál es la mejor manera de aprender aplicaciones móviles iOS?