Opinion sobre el desarrollo en iOS y Android

Que tal!,

En este post les quiero hablar un sobre las plataformas móviles mas famosas que existen hoy en día. El título del post era “Análisis sobre el desarrollo…” pero lo cambié a Opinión  por que ciertamente es mi opinión en base a mi pequeña experiencia y no una investigación o algo por el estilo.

Lo que quiero tratar en este articulo es las ventajas y desventajas que yo he llegado a encontrar al momento de querer desarrollar en alguna de estas plataformas (si no es que en ambas).

De lo primero que quiero hablar es sobre:

Lenguaje

Logotipo Java

En Android sabremos que es una plataforma en la que se desarrolla en el lenguaje Java. Este es uno de los lenguajes mas usados en todo el mundo, y en el que al parecer la mayoría comienza a programar. Java sigue una sintaxis limpia, simple y muy legible eliminando muchas características de bajo nivel con las que contaban los lenguajes en el que fue basado. Existen muchos lenguajes de programación o lenguajes “script” que son muy similares a Java (o Java similar a ellos) por lo que si vienes de un lenguaje popular (C#, PHP o Javascript) no será mucha dificultad aprender la plataforma y el paradigma, ya que prácticamente es el mismo.

Java, como ya lo mencione anteriormente, elimina muchas características de bajo nivel con las que contaban otros lenguajes de antes. En Java no necesitas manejar la memoria, no debes preocuparte en que localidades de memoria están tus datos y mucho menos, no tienes la necesidad de liberar espacio. Java se preocupa de eso por ti.

Logotipo del IDE de Objective-C XCode

En iOS, se desarrolla en un lenguaje denominado Objective-C. Este lenguaje como su nombre mismo lo dice, es C convertido al paradigma POO, por lo que si tu eres un experto en C/C++, para ti no será un problema aprender este lenguaje. Pero seamos sinceros, hoy en día en todas las instituciones educativas aprendes programando con Java o algún lenguaje de .NET. Como recomendación principal, si quieres aprender Objective-C, primero tienes que aprender las bases de C. Y aun así eso no será suficiente, Objective-C es un lenguaje difícil de leer y te limita a lo que es y no poder crear tu propio estilo de código. Digamos. Python es un lenguaje que obligatoriamente tienes que seguir una estructura, usando forzosamente los “tabs” o el tabulador para delimitar instrucciones, métodos, cualquier estructura condicional o bucle. Pero la manera en que Python lo hace, hace que sea lo mas legible que existe en el mundo, como si fuera pseudo código. Objective-C a mi parecer cambio para mal por haberse basado en Smalltalk, para mi es un lenguaje que te mete caracteres que realmente no son necesarios, que ensucian tu código y que hace mas difícil el desarrollo (entre comillas, porque el IDE para iOS te ayuda al respecto).

Y tal vez la sintaxis puede ser que no sea lo mas importante, como cualquier lenguaje que varia pues con la practica memorizas toda la sintaxis y ya nunca batallas con eso. La siguiente cuestión es de que en Objective-C tienes que leer primero mucha teoría antes de comenzar a desarrollar. En Objective-C tu estas a cargo del manejo de memoria, y aunque existe ARC (Automatic reference counter), que “maneja” la memoria por ti, no estas exento de tener que estudiar un buen para comprender todo eso. En Objective C, se podría decir que las variables no existen, todos los objetos deben de ser referenciados por medio de un apuntador, pero cuando se trata de tipos de datos nativos, es donde si existen nuestras amadas variables. Por lo tanto debes de saber usar apuntadores ( no es gran problema la verdad) pero si la programación no es tu pasión, puede que te encuentres en problemas en un futuro.

ARC es algo bueno que ha sucedido a objective-C, ya que te ahorra muchos problemas, pero aun así, hay que comprender el manejo de memoria, porque no todo es perfecto en Objective-C

Declaración de un método en ObjectiveC
Clase simple en JAva

Mi conclusión con respecto al lenguaje es:

Si vienes de cualquier lenguaje Orientado a Objetos ( o no precisamente ), será fácil desarrollar en Android, porque no tienes una carrera larga para aprender Java. Si estas familiarizado con C, objective-C no será un gran problema para ti, aunque aun así tendrás que estudiar sobre el manejo de memoria en iOS y la manera de manejar los apuntadores.

Entornos de Desarrollo

Eclipse para Android

Para Android tenemos muchas opciones, pero la mas recomendada y la que les recomiendo yo, es Eclipse. Eclipse es multi plataforma, puedes usarlo en Linux/GNU, OS X y Windows. Eclipse es un entorno que cumple con todo lo que se requiere para desarrollar. Cuenta con todo lo que tiene cualquier IDE de gamma alta (debugger, autocomplete, designer, addons, rendimiento, etc).

XCode, limitado solo a desarrollo Apple

Por el otro lado, tenemos Xcode para desarrollar para iOS. Este solo esta disponible para Mac OS X, y mientras Xcode aumenta de versión, también tenes que aumentar la version de tu Mac. Eso para mi es malevolo, Apple engancha a los desarrolladores, pero en fin, es su modelo de negocios.

XCode en este caso para mi viene ganandole a Eclipse, tiene muchas mas herramientas de debuggeo, monitorieo de fugas de memoria, rendimiento y muchas cosas mas que Eclipse, el diseñador de interfaces es asombroso ( mas delante hablaré de eso). Pero como comenté, solo esta disponible en Mac OS X versiones actualizadas ( si quieres una buena versión de XCode, ya que versiones viejas, venía separado el editor de texto del diseñador).

Desarrollo

La verdad, Android ofrece muchas cosas, ofrece mas que iOS y eso lo digo con certeza. En Android puedes hacer cualquier tipo de aplicación de una manera mas fácil, y lo digo por los elementos con los que cuenta Android:

En Android existen los background services, esto significa que tu aplicación puede seguir ejecutándose  seguir haciendo su función si tu estas haciendo otra cosa o incluso si tu dispositivo esta lock. En iOS es un insulto lo que acabo de decir, iOS no existe los background services; existe el background processing pero esta 100% limitado. Apple no te deja tener tus aplicaciones en background si no cumples con ciertos requisitos, y los requisitos son absurdos y te limita demasiado. Si tu aplicación no utiliza: música  gps, Voz por IP o uso de hardware externo, esta prohibido tener background processing. Esto puede llegar a limitar mucho tu aplicación, todo esta basado en notificaciones remotas para saber que pasa con tu aplicación si esta cerrada. iOS solo te deja como máximo a cualquier aplicación, tener 10 minutos de procesamiento en background si tu aplicación fue cerrada y estabas en una operación importante.

iOS tiene su motivo de hacer esto, y esto es preservar la vida de la batería  reducir los errores y aumentar el rendimiento. Es una razón buena, es por eso que dicen que iOS nunca te da problemas, pero es un dolor de cabeza para los desarrolladores al momento de hacer una aplicación y esto representa un problema serio.

En Android existen los llamados Broadcast Receivers, estos te permiten saber que pasa con el teléfono  por ejemplo, si el WIFI se  apagó, el receiver te genera un evento y te envía información sobre lo que pasó, puedes saber muchas cosas que ocurren en tu dispositivo. Esto te hace el desarrollo mas sencillo.

En resumen Android cuenta con mas componentes que iOS, pero no significa que en iOS no se pueda hacer cosas que en Android sí (a excepción por el background processing, este lo “simula” por medio de remote notifications).

En iOS existen la vista, el controlador y el modelo. No existen los servicios ni los broadcast receivers.

En iOS es mas hermoso el diseño, y esta es una gran ventaja. La verdad en iOS, solo tienes que aprender objective-c y lo demás será pan comido. iOS es MVC, y en iOS solo existen iPads, iPhones y iPods y se acabó. El diseño es totalmente visual, y la vista esta totalmente separada a la lógica. Xcode te ayuda bastante en ese aspecto y dependes mucho de el, para enlazar los componentes de la vista al controlador, todo es drag and drop. Eso para mi es un punto bueno, no le veo lo malo. iOS es fácil cuando ya sabes objective C, creas tu aplicación para iPhone o iPod touch, y el mismo código puede ser usado para las vistas de iPad. Todo el diseño son constantes (solo varia el diseño en retinas displays, pero existe  el auto layout a partir de iOS 6).

iOS es facil de aprender (no objective c), por lo mismo que no tiene tantos componentes como Android (a componentes me refiero a services, content providers, broadcast receivers, etc), solo tienes que conocer los controles y enlazarlos con la lógica, y claro… todo visualmente (obviamente en el controlador todo es código, la vista no…)

En Android es un dolor de cabeza el diseño… aunque existen estándares  hay una infinidad de dispositivos de distintos sabores y colores que usan Android. En Eclipse existe un diseñador, pero la verdad, es obligatorio que te sumerjas al código de ese diseño. Una ventaja… es XML. En iOS no tenemos ese problema, por que los malevolos de Apple solo permiten que iOS solo sea usado en sus 3 distintas gamas de dispositivos

Los Storyboards en iOS es lo mejor que existe, ademas de permitirte hacer un prototipo, ya tienes tu vista y tu flujo hecho:

Image

Lo mismo ocurre al crear la versión para iPad

En resumen respecto al desarrollo: En Android existen muchos componentes que te ayudan a expandir las funcionalidades de tu App, pero eso conlleva a mas tiempo de estudio de la plataforma Android, en cambio en iOS, si ya pasaste tu doctorado de Objective -C, todo será mas fácil…

Publishing

App Store de Apple

Para no irnos tan largo, iOS es un problema respecto a Apple. Tienes que pagar 99 dolares al año y ademas una serie de certificados y mucha seguridad, eso es bueno y malo. En Apple es totalmente ilegal distribuir tu App si no es por la Appstore, en Android no…

Tienda oficial de Android

En Android y Google Play pagas 20 dolares y ya estuvo, puedes subir tu App a la google play o distribuirla por tu cuenta.

Malo -> Google play esta lleno de Apps Spam

Bueno -> Appstore te encontrarás aplicaciones que ya pasaron por un proceso molesto, pero ninguna malintencionada

Esto para el usuario es grandioso, pero para el desarrollador no…

Conclusion

En las dos plataformas no se puede hacer exactamente lo mismo, Android viene ganando en ese aspecto. Pero por lo mismo Android a veces tiene muchos errores en sus Apps y pueden consumir mucha batería si no tienes cuidado, Google confía en los desarrolladores estarán conscientes de eso… al parecer Apple no, y te restringe mucho. iOS es fácil si sabes Objective C, Android es un poco mas complejo aun teniendo la facilidad de Java.

Lo bueno de Android:

  • El lenguaje
  • Grandes posibilidades de desarrollo (por todos sus componentes)
  • Distribución fácil
  • No dependiente de ninguna plataforma de desarrollo (Windows, Mac o Linux/GNU)
  • Respaldado por Google

Lo malo de Android:

  • Si no eres responsable, puedes hacer una aplicación mortal si no utilizas debidamente todos los componentes
  • Aunque existe diseñador, tienes que adentrarte al mundo de los Layouts
  • Carrera larga para comprender toda la plataforma

Lo bueno de iOS:

  • El diseño es hermoso
  • MVC te facilita en el desarrollo para las distintas versiones (iPad o iPhone)
  • Coco touch es simple, y no te llena la cabeza de tantos componentes, solo hay que conocer el framework
  • ARC, manejo de memoria (aunque pienso que aun le falta)

Lo malo de iOS:

  • Te limita a lo que Apple dicta
  • Necesitas licencia para todo (Apple provisional portal, debuggin en dispositivos reales, etc)
  • Objective C es un infierno al inicio
  • Un proceso largo para publicar tu App
  • Manejo de certificados para todo (aunque tiene su lado bueno)

Bueno, con esto termino, les recuerdo que esta es mi opinión, comenten la suya.

Saludos

Edito:

Sorpresas en comentarios de stackoverflow… No solo yo pienso as’i

Screen Shot 2013-02-26 at 08.46.20

Anuncios

9 comentarios sobre “Opinion sobre el desarrollo en iOS y Android

  1. Apenas me voy a poner a aprender bien Android, pero si cómo comentas he visto lenguaje de Objective-C y se me hace bien cochina jaja poniendo guiones bajos y otros caracteres piratones, pero ps creo que es una ventaja si le sabes a ese, si tienes una mac ya de paso también desarrollas para Android, a ver si en un futuro xD saludos wey.

    1. La verdad no me gusta para nada, con Titanium Studio hice una aplicación bien sencilla para Android, la aplicación instalada ocupada 18 MB!!. Hice la misma aplicación pero en Java y android nativo y ocupaba 150 KB instalada. Afecta mucho el rendimiento.

      Igual aqui hay una comparación : http://tinyurl.com/bxe5fb3

      1. Lo he estado probando estos días pero la verdad aun se batalla en lograr una app al 100%, importación de librerías es un gran detalle, no se importan, bueno al menos no logre importarlas. Prefiero quedarme con eclipse, estoy trabajando muy a gusto con el.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s