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.