11 mar 2013

La aventura de mudar de iOS a Android

 
Soy programador iOS desde hace ya 5 años (en Mac, veintitantos). No puedo asegurarlo ni tampoco me vanaglorio de ello, pero creo que fui quizás el primer incauto que tuvo que hacer incansables peripecias administrativas internacionales para conseguir la licencia de desarrollo iPhone en España. Entre otras, tuve que llamar a Washington y obtener una especie de licencia de autónomo americana. Por cierto, qué fácil es allí: bastó con una llamada de teléfono y me enviaron gratuitamente a casa (sí, a casa en España) toda la documentación. Hoy en día estas gestiones son mucho más fáciles, pero sigue siendo igual de difícil (y caro) ser autónomo en nuestro país. A ver si llega de una vez la famosa alfombra roja que todos los gobiernos prometen...
Bueno, yendo al grano. Desde aquel día cuento ya con casi una veintena de aplicaciones para iPhone e iPad. Mi orgullo más reciente es FreeSector, un exitoso y gratuito juego de puzzles circular desarrollado junto a mi primo en nuestro tiempo libre.
Como buen usuario de productos Apple desde hace 25 años, Android es una plataforma que jamás me había interesado ni como usuario ni como desarrollador. Jamás hubiera considerado la idea de lanzarme al mundo del desarrollo Android si no fuera por mi amor por la docencia. Cuando en la Universidad Internacional de La Rioja me ofrecieron dar un módulo del Máster de Aplicaciones Móviles y que en el mismo debería dar una introducción a Android, no me lo pensé más: había llegado la hora de dar el paso.
¿Cómo? Yo no tenía ni idea de esta plataforma. Cada vez estaba más claro que compaginar ambos mundos no iba a funcionar. Yo soy persona de un único amor, de una única relación formal, como Alicia Keys con BlackBerry. Era necesario lanzarse a la piscina y tomar una elección. Era necesario pensar en Android, vivir para Android y respirar Android por todos los poros. Así que vendí mi iPhone al primer postor que resultó ser un amable director creativo de los increíbles estudios gráficos Socarrat, Vicente Sanfeliu. Sé de buena tinta que mi iPhone está en buenas manos y sí, ya sé que él (mi iPhone) nunca me abandonaría.
Con el dinero de la venta, me compré mi primer (y único hasta la fecha) móvil Android de marca Airis. Sí, me habéis pillado, lo obtuve con una de las famosas promociones postnavideñas del periódico regional de turno. Y no, no me había dormido en los laureles, ya llevaba semanas haciendo pinitos con el entorno de desarrollo propio de esta plataforma, para cuando tuve el terminal Android en mis manos y ya incluso había publicado mi prima app en la tienda Google Play. Paso a describiros mi experiencia como usuario, como desarrollador y como profesional durante esta migración.

El teléfono

Se trata de una de las primeras incursiones Airis en el mundo de la telefonía móvil. El modelo es concretamente el TM475. Está bastante bien: pantalla "retina", cámara 8Mpx, fluido. Se ha comparado en potencia con un iPhone 4 (de hecho el motor es un CortexA9, sobre el que el Apple A4 está basado). Puede decirse que es un móvil español creado por una empresa española, lo cual es un plus en los tiempos que corren. No tiene ni mucho menos la robustez de un iPhone, pero me vale. Cosas que echo del menos del hardware del terminal: un botón de silencio y el no poder manejarlo con total comodidad con una única mano. Parece mentira, pero la decisión de diseño de Apple respecto a la anchura del iPhone es la (única) correcta. Es el tamaño adecuado para que la mano media pueda agarrar y usar el terminal con total confianza. ¡iPhones con pantalla grande nunca mais! Con este terminal Airis tengo miedo de que se me vaya de la mano al perder sujeción intentando alargar el pulgar todo lo posible. Me quedo con lo positivo: es un móvil "made in china" pero diseñado en España con una calidad/potencia de componentes (que no de diseño) pareja a la de algún iPhone inexistente entre 4 y el 4S.

El operativo.

Se trata de Android 4.0.4. Es prácticamente la misma versión de Google con alguna adaptación gráfica por parte el fabricante. No hay actualizaciones a versiones más recientes (al menos todavía) y puede decirse que no las espero nunca. Eso es algo que detesto: depender de tantos terceros para poder actualizar el operativo. Que si el operador, que si el fabricante, que si el mago de Oz… Con un iPhone es increíblemente más sencillo: Apple se encarga de todo. Como dijo Steve Jobs, "operador, tú encárgate de la red, que nosotros nos preocupamos por el teléfono". Es una pena, porque hay terminales Android suficientemente nuevos y potentes para soportar muchas versiones venideras del sistema. Entonces, ¿por qué los usuarios de Android no montan en cólera? Yo veo dos razones. Primera: les da igual. En este grupo metería a jóvenes y usuarios poco o nada tecnófilos que no valoran el estar actualizados. Segunda: las aplicaciones. A diferencia de iOS, las aplicaciones de Android pueden llegar a tener un control muy profundo sobre las labores que, en mi opinión, deberían ser propias y únicas de un sistema operativo móvil. Con esto se consigue una "falsa" sensación de versatilidad, novedad, avance y de "estar a la última". Por ejemplo, las aplicaciones pueden ser "launchers" y redefinir por completo el interfaz de usuario, pueden ser fondos de pantalla, interactivos, widgets que se ponen sobre el escritorio dando un aspecto único y personal a cada terminal. Las aplicaciones de Android pueden también alcanzar privilegios dignos de un OS que a cualquier usuario de iOS nos alertaría como mínimo (por no decir que nos espantaría). Por ejemplo: ¿Cómo es posible que una aplicación pueda iniciar y cerrar aplicaciones a su voluntad? ¿Cómo es posible que una aplicación pueda abrir o cerrar conexiones (wifi, 2G, 3G) cuando le venga en gana? ¿En qué cabeza cabe que una aplicación pueda correr en segundo plano permanentemente sin un icono bien visible? Sí, es verdad, cuando una aplicación va a instalarse se presentan/advierten los permisos y acciones que son necesarios, pero ¿qué usuario se para a leer parrafadas técnico-legales en el metro o en el autobús?
Sí, al que va de iOS a Android tanta "libertad" le da un poco de miedo, y no quiero entrar en controversias relacionadas con virus o malware. Se supone que Google está vigilante desde su tienda Google Play para que las aplicaciones no hagan nada desbocado, pero para una mente conservadora como la mía o la del usuario medio de iPhone...
Vayamos ya a aspectos relativos al desarrollo.

El lenguaje de programación

Estoy muy acostumbrado a Objective-C. Reconozco que Java es en muchos aspectos más "simple" y repensado a partir de los paradigmas de programación orientada a objetos de los 80-90. Toda la definición de las clases se hace en un único fichero: no hay cabeceras, por ejemplo. La interfaz de una clase se dirime a partir de las definiciones de sus elementos. Por otro lado, echo mucho de menos la versatilidad de las categorías de Objective-C y sobre todo, sobre todo, sobre todo, que haya una única clase para crear colecciones de elementos: NSArray (o NSMutableArray para colecciones modificables). La simplicidad y potencia de NSDictionary también se encuentra a faltar. Trabajar con la funcionalidad de estas dos clases en Java es una odisea de complejidad e innecesaria diversidad.

El entorno de desarrollo

Por defecto, el entorno de desarrollo de Android (ADT) es un Eclipse con una serie de modificaciones (realizadas a través de plugins). Tengo que decir que me sorprendió gratamente lo bien y relativamente listo para usar que lo ha preparado Google. Ha conseguido refinar un parco y raudo entorno de desarrollo basado en Java en algo muy decente y listo para lidiar con la inmensa segmentación del ecosistema Android. Cuenta con un panel de control desde donde podemos descargar el API para cada versión de Android así como documentación, emuladores y ejemplos. Por cierto, hablando de emuladores: si no trabajamos con los emuladores basados en Intel, estamos abocados a la muerte por desesperación (los emuladores basados en ARM tardan unos 10 min en arrancar). Me sorprendió gratamente también la buena comunicación entre el IDE y el emulador: me esperaba algo más humilde (por no decir "cutre"). También me gustó mucho la integración de la documentación y la ayuda del ADT para completar y corregir código necesario. Casi pondría a esta cualidad (ligeramente) por encima de la equivalente en Xcode. Android trabaja también con proyectos, pero no existe una figura de fichero de proyecto que aglutine todos los ficheros correspondientes a una aplicación. Me gustaría poder hacer doble click sobre este fichero y que el ADT lo abriera y permitiera trabajar como lo hace Xcode. En el ADT los proyectos se autodefinen por la estructura de sus directorios y punto. Tampoco me acabo de acostumbrar al omnipresente "workspace", donde están todos las carpetas con todos los proyectos. Me gusta más el enfoque de Xcode: una ventana, una idea, un proyecto, una app. El ADT permite una alta configuración de las herramientas y zonas de operación. Esto puede parecer una ventaja, pero a la larga se encuentra a faltar la simplicidad de Xcode que apenas tiene 4 zonas bien diferenciadas: panel de la izquierda (ficheros, clases, errores, búsquedas, etc.), panel de la derecha (propiedades), zona inferior de depuración y zona central de edición (de código y gráfica).

Editor de interfaz

Aquí llegan las mayores diferencias en cuanto a desarrollo se refiere. En iOS sólo tenemos que diseñar la interfaz para básicamente dos dispositivos: iPhone e iPad. El enfoque habitual de un desarrollo suele ser o bien que la app final sea para iPhone, que sea para iPad o que sea universal (ambas). En cualquier caso los lienzos y opciones están contados. De hecho lo normal es dibujar la interfaz usando posicionamiento absoluto ya que es imposible que pueda variar más allá de la transición del modo retrato a apaisado o viceversa. El caso más complicado es el de al app universal. En este caso, lo normal es diseñar dos interfaces distintas y trabajar con dos ficheros separados: uno para iPhone y otro para iPad. Por un lado puede parecer más trabajo, pero por otro se consigue una experiencia de usuario mucho más rica en cada dispositivo. En el casos e Android es otra cosa. Se suele operar directamente con un único fichero de interfaz para todos los dispositivos. Las aplicaciones son "universales por defecto" y deben de poder adaptarse a cualquier pantalla, ya sea teléfono, tablet o un engendro intermedio anatómicamente atroz (estoy hablando de los horrendos "phablets"). Para poder llegar a todas las configuraciones, se hace uso principalmente del posicionamiento lineal y relativo entre componentes. También se evita todo lo posible las vistas anidadas (una dentro de otra, que es muy normal en iOS). Yo ya conocía esta filosofía de diseño de interfaz de mis tiempos de Unix (GTK, QT, etc.), pero reconozco que me ha costado volver a coger el tino.
A pesar de lo que acabo de decir, hay que reconocer que Apple está apostando recientemente por el posicionamiento relativo "a la Android". ¿Por qué? Mi "pet theory" personal es que la plataforma iOS va a crecer todavía más (iWatch, iTV?) y hay que ponérselo fácil al desarrollador para que no tenga que tener en danza tantos ficheros de interfaz. Este posicionamiento relativo en iOS se consiguen mediante una tecnología llamada "constraints" (ligaduras). Sí, tendremos apps capaces de correr en cualquier dispositivo con un único binario y con una única definición de interfaz.

Licencias de desarrollador y tiendas de aplicaciones

Nuevamente hay diferencias significativas de cara al desarrollador y al usuario. Por un lado, un usuario Android puede instalar las aplicaciones que le venga en gana en su dispositivo si cuenta con el correspondiente fichero apk (paquete de instalación). Esto incluye las propias aplicaciones desarrolladas en el ADT. En iOS esto no puede hacerse si no se ha pagado la licencia anual de 79€. Podemos trabajar con el emulador pero oh boy!: nada de poder testear en un iPhone real si no hemos pasado (anualmente) por caja. La licencia para Android es de unos 18€ y es para toda la vida. Lo que permite es poder publicar en el Google Play (porque ya podíamos ejecutar nuestras apps en nuestros dispositivos sin ninguna restricción).
Otra diferencia importante: el proceso de aprobación. En el App Store es manual y lleva más o menos una semana. En Google Play es un proceso automático y lleva unas pocas horas. Se supone que este proceso se encarga de detectar virus, copycats (apps que son copias de otras) y maldad en general. Como podéis comprobar la diferencia es importante para el desarrollador: de tener que esperar una semana a que un ser humano decida si tu app es digna de ser distribuida, a tenerla publicada en unas cuantas horas sin ningún o casi nulo proceso inquisitorio. Ya me he encontrado apps en Android que han sido actualizadas varias veces en un día, dado que no representa ningún dilema para el desarrollador. En el caso de iOS, antes de publicar una versión, hay que pensarlo bien dos veces, porque en el escenario de una metedura de pata no podremos reparar el daño hasta una semana después.
Las herramientas para el desarrollador de gestión y puesta a la venta de sus aplicaciones son muy parecidas y no voy a destacar ninguna diferencia significativa. En iOS tenemos iTunes Connect y en Android tenemos el Developer Console.
Nada más, espero que os haya parecido interesante esta humilde comparativa de un experto en iOS y un novato en Android. Os preguntaréis: ¿entonces cuál es tu plataforma ganadora? No lo voy a decir. Estamos en crisis y no hay que hacer ascos a nada, sino mantener una actitud abierta y deseosa de aprender. Sólo confesaré que sí: tengo una favorita, pero también creo y defiendo la libertad y apertura tecnológica como expresa muy bien Vic Gundotra (Vicepresidente de Google). Ambas plataformas son interesantes, respetables y útiles. Elegid la vuestra, o mejor, si podéis, elegid las dos.
Si queréis aprender más sobre desarrollo móvil en Android e iOS, no dudéis en preguntar por el fantástico Postgrado en Desarrollo de Aplicaciones Móviles de la Universidad Internacional de la Rioja. Allí os espero con ganas de aprender y con inquietudes.

0 comentarios:

Publicar un comentario

Información de Relevancia

¿Qué sucede en twitter?

Actividad en Facebook

HOSTING GRATIS

Hosting