Cosas de Apple… mientras desarrollo apps móviles híbridas con Ionic

Me ha gustado mucho el framework Ionic para implementar apps móviles híbridas que evitan tener que crear apps diferentes para cada plataforma y que además permiten usar los conocimientos adquiridos en el desarrollo web (CSS, HTML, Angular, Javascript). Hay unas desventajas de las apps híbridas frente a las apps nativas pero, con el tiempo, dichas desventajas han ido disminuyendo cada vez más. Por ejemplo, problemas muy específicos relacionados con acceder al hardware de un determinado dispositivo, aunque de cualquier manera, se puede construir un plugin para resolver dichos problemas (si es que alguien no lo ha construido ya), pero en ese caso nos puede tocar tener algo de conocimiento acerca de Objetive-C o Java.

El desarrollo de apps para Android en Ionic es ágil, muy abierto y con una buena cantidad de foros online donde se averiguan soluciones rápidas a diversos errores y problemas de implementación. Se puede usar prácticamente cualquier sistema operativo o computador actual y la fase de pruebas no requiere de procesos tan complejos. Conectar un computador al dispositivo móvil, necesita sólo unas pocas instalaciones y es relativamente fácil. Luego, se puede enviar un archivo APK (algo así como el .exe de las apps de Android) por e-mail o cualquier otro medio a una persona para que pruebe la app (sin subirla a la tienda de Google) con la simple condición de que quien la vaya a instalar, habilite la aceptación de “fuentes desconocidas” en la configuración del teléfono o tablet.

Por otro lado, el desarrollo de apps para iOS con Ionic es también ágil en teoría, pero en la práctica es… digamos que… muy Apple. Y a veces eso me ha sacado más de una cana.

Para empezar, se parte con la restricción de que supuestamente no se puede desarrollar apps para iOS en cualquier computador. Claro, ¡que sacrilegio sería eso! Así que, normalmente, hay que desprenderse de algún dinero para comprar un computador Mac si no se tiene uno ya. Bueno, aunque yo no me  resigné a gastar dinero en algo que a mi juicio es suntuoso y a veces con un precio ridículamente alto (cosa frecuente con la marca Apple), e investigando un poco logré ejecutar el sistema operativo OS X El Capitan en Windows por medio de una “máquina virtual” (Oracle VM VirtualBox) y así he venido trabajando sin muchos inconvenientes relacionados con este aspecto; eso sin duda es una alternativa aunque puede resultar un poco complejo para personas que no tienen mucha experiencia haciendo este tipo de injertos informáticos.

Ahora bien, ser desarrollador para dispositivos Apple pues también cuesta (claro, es que Apple es Apple y el estatus lo amerita… no faltaba más). Así que hay que pagar US$99 anuales por una cuenta de developer o sino tendremos que usar y depender siempre de la cuenta de alguien más.  Compárese esto con el costo de tener derecho a subir apps al Google Play Store: ¡US$25 y se pagan sólo una vez!

Pfff. Apple, Apple, Apple. Pero bueno, eso fue sólo el comienzo. O el preámbulo de las innumerables frustraciones, rabietas y maldiciones lanzadas contra Apple cuando recién comenzaba a implementar apps para iOS por culpa de engorrosos problemas técnicos y consecuentes errores de compilación o ejecución. De verdad, creo que algunos días alcanzaba a odiar tontamente al finado Steve Jobs… aunque bueno, sea como sea, el tipo era un visionario, ¿verdad? (o al menos en la películas parece serlo).

Sólo para resumir, cuento una situación que me pasó hace poco con la app de un cliente:

  • Mi iPad (el cual uso para probar apps en mi trabajo) se actualizó automáticamente a la versión 10 de iOS. OK. Normal. Olvidé desactivar eso. Ni modo.
  • Cuando iba a probar una pequeña modificación que le hice al app de mi cliente, resulta que para poderlo hacer en iOS 10, tenía que actualizar OBLIGATORIAMENTE la versión de Xcode (el entorno de desarrollo de Apple) en el computador. Eso sería aceptable si fuera cosa de 30 segundos. Pero estos benditos archivos de Xcode son de varios gigabytes y aparte de eso creo que los ponen en los servidores más lentos que tiene Apple en el mundo porque tardan una eternidad.
  • Una vez bajada la bendita actualización, me dispuse a instalarla y ¡zúas! ¡No se puede! Hay que actualizar antes OBLIGATORIAMENTE la versión del sistema operativo (OS X) porque… pues no se la razón… me imagino que simplemente a Apple le da la gana obligar a sus usuarios a actualizar siempre que tiene la oportunidad, no vaya ser que se les dañe el negocio porque sus fanboys se distraigan y se queden congelados en el tiempo usando una de las versiones viejas de sus sistemas operativos y eso les dificultará luego de alguna manera seguir ordeñándolos económicamente por medio de sus novedades en el mercado (guardadas las proporciones, algo parecido le pasó a Microsoft con buena parte de los usuarios de Windows XP que se rehusaban a remplazar ese viejo pero, para muchos, eficiente y suficiente sistema).
  • Y bueno, al actualizar todo, tuve que enfrentarme, invariablemente, a los típicos errores crípticos de instalación que Apple no se esmera en explicar muy bien y que generan frustración, ira y dolor de cabeza. Abrir el navegador, poner el error, ver posibles soluciones puestas en stackoverflow.com, probar, soltar otra maldición contra Apple, buscar otra solución…

En un punto en el tiempo, cuando ya había perdido más de medio día de trabajo tratando de probar un cambio insignificante en la app de un cliente, lancé nuevos insultos mentales contra aquella empresa. Y, claro, también me recriminaba el hecho de no haber desactivado las  actualizaciones automáticas del iPad.

Sería muy largo mencionar aquí los detalles engorrosos del complicado proceso para distribuir una app en iOS (ya sea para pruebas o producción) que involucran una confusa mezcla de certificados, perfiles de aprovisionamiento (provisioning profiles) que sólo te servirán para un único computador, tener que registrar cada uno de los teléfonos o tablets en donde vas a hacer pruebas como desarrollador, lidiar con frecuentes errores de conexión del iOS App Store que no permiten subir una nueva versión de una app sin otra solución que “intentar más tarde”, descifrar repentinos mensajes de error al validar un app y, como si todo eso fuera poco, el lento, lentísimo y a veces burocrático proceso de revisión de las apps por parte del personal de Apple antes de que puedan ser publicadas… proceso que, entre otras cosas, no es raro que eche por la borda horas y horas de trabajo de muchos desarrolladores porque a los revisores humanos de Apple se les mete en la cabeza que las apps no cumplen con sus políticas (cuando en muchos de los casos se trata de una falta de criterio al revisar, o de una mala e incompleta revisión, o simplemente de la pereza de quien revisa prefiriendo rechazar un app cuando tiene alguna duda, en vez de pedir aclaración al desarrollador).

Apple, Apple, Apple. Nadie me obliga a comprar sus caros productos o pagar su membresía anual como developer pero, por amor de Dios, ¿por qué hacer las cosas tan complicadas para los programadores de apps? Tienen mucho que aprenderle en ese sentido a la gente de Google Play Store.