Helios, crea tu propio Backend para iOS Apps con Ruby por @jmoreno78

Autor: | Última modificación: 26 de septiembre de 2023 | Tiempo de Lectura: 6 minutos
Temas en este post:

Backends de Terceros

Teniendo en cuenta la gran oferta que hay, actualmente, de backends de terceros para aplicaciones móviles o mBaaS (mobile Backend as a Service) hay que echarle muchas ganas a desarrollar y mantener uno propio. Precisamente, si por algo han triunfado servicios como Azure, Parse o el español Backbeam es por resolver de forma sencilla la gestión de la persistencia de datos en un servidor y otros servicios como las notificaciones push.

Si no hubieran proliferado este tipo de servicios de backends de terceros, un desarrollador de aplicaciones móviles también habría tenido que dedicarse al desarrollo de los servicios web necesarios para que la experiencia de uso de sus aplicaciones fuera completa.

Tu propio Backend con Helios

Helios.io

Curiosamente, cuando parecía que en esto de los mBaaS todo estaba inventando y que lo máximo que íbamos a ver eran evoluciones de las mismas ideas, apareció Helios, un framework hecho en Ruby para tener nuestro propio backend. Un pequeño proyecto, que en algunos aspectos, no tiene nada que envidiar a gigantes como Parse. Helios está en fase beta y si algo puede criticarsele ahora mismo es que está completamente orientado a servir como backend de aplicaciones iOS. Los servicios que ofrece son:

  • Almacen de datos
  • Notificaciones PUSH (APN) (APN)
  • Gestión de In-App Purchases
  • Gestión de Passbook
  • Gestión de Newsstand.

Al ser un proyecto open-source, ya hay algún pull request que permite el envío de notificaciones a dispositivos Android pero, de momento, Helios no se ha sentido atraído por el reverso tenebroso de La Fuerza.

Vamos a ver, con un poco más de detalle, en que consisten cada uno de estos servicios.

Almacén de datos

Este módulo requiere de un xcdatamodel (si, ese fichero donde está el modelo de datos con el que Core Data crea todas las entidades) para crear una base de datos en el servidor que es un espejo de la base de datos de nuestra aplicación. Además de crear las tablas, Helios proporciona un API REST para gestionar cada una de las entidades así como las relaciones entre ellas.
Repito, asi, por la cara, tendremos una replica exacta de la base de datos de nuestra aplicación (o del xcdatamodel que le pasemos) con todos los métodos para insertar, leer, actualizar y borrar en cada una de las tablas y manteniendo las relaciones entre las mismas, si las hay. Helios FTW!!!!

Notificaciones PUSH

Este módulo tiene doble funcionalidad. Por un lado sirve de repositorio de los dispositivos registrados para recibir notificaciones PUSH desde nuestro servidor y por otro lado se encarga del envío de notificaciones a estos dispositivos. También nos dará la posibilidad de buscar entre la lista de los dispositivos vinculados para extraer un grupo y de esa forma enviar mensajes de forma más selectiva.
La gestión de los dispositivos registrados tiene dos métodos, uno para registrar el dispositivo y otro para eliminar el registro.
La función de envío de notificaciones requiere que el certificado de envío de notificaciones PUSH (en formato .p12) esté en el servidor. Esto es análogo a servicios como Parse, Urban Airship y compañia.

Gestión de In-App Purchases

Las funciones que abarca esté módulo son aquellas que Apple en su portal recomienda a todos los desarrolladores que ofrezcan compras mediante In-App Purchases en sus aplicaciones:

  • Servir la lista de Identificadores de Producto disponibles en nuestra aplicación.
  • Verificar que el recibo de compra es correcto mediante llamada a los servidores de Apple
  • Registro de las compras realizadas por un dispositivo

Estas tres funciones, junto con el API de Store Kit, son todo lo necesario para poder ofrecer compras dentro de la aplicación sin complicaciones.

Gestión de Passbook

Quizá Passbook no sea una funcionalidad habitual en una app, pero si te animas a desarrollar alguna aplicación que use este servicio debes tener en cuenta que Apple te exige tener un servidor con un API Rest muy concreta para poder comunicarse con tu aplicación.

Helios crea ese API Rest y también las tablas necesarias para dar el soporte que Apple exige. Lo que no hace es generar el passbook en si, eso corre de tu cuenta. Para que la vida no sea tan cruel, hay una gema llamada Dubai que podrías utilizar para crear los passbook.

Gestión de Newsstand.

Igual que pasa con Passbook, no todas las aplicaciones son de tipo Newsstand, sin embargo, si quieres hacer una aplicación para que la gente, en vez de leer tu blog a través de Safari, Feedly o Reeder, lo haga a través de una app y además te pague un poquito por generar contenido tan interesante, Helios te echará una mano. Como siempre, además de crear el repositorio, crea un API Rest que cumple con las recomendaciones de Apple. Las funcionalidades son un rss o plist con todo el contenido disponible para descargar, la información de un contenido en concreto y la función para crear nuevo contenido.
Si necesitas almacenar el contenido a descargar, Helios es compatible con Amazon Web Services, Google Cloud Storage y Rackspace. Pasándole un par de parametros en la configuración del servicio, Helios lo pondrá disponible para descargar sin que tu tengas que pegarte con el API de esos servicios.

¿Cómo se usa Helios?

Si usas Cocoapods ya estarás familiarizado con las gemas de Ruby y con el uso del terminal para lanzar los comandos de estas aplicaciones. Helios es también una gema de Ruby que puede usarse como aplicación independiente o también dentro de aplicaciones web hechas en Ruby con los frameworks habituales: Rails, Sinatra, etc. Como este blog es sobre desarrollo iOS vamos a centrarnos en su uso como aplicación independiente.

Lo primero que tenemos que hacer es asegurarnos de tener instalada una versión reciente de Ruby, para ello, en el terminal escribe lo siguiente:

$ ruby -v

Si tenemos una versión de Ruby inferior a la 1.9, es necesario que la actualicemos. La forma más cómoda de hacer esto es usar rvm.

Si la versión de Ruby de nuestro Mac ya es, como mínimo la 1.9, el siguiente paso sería instalar la gema si es que no la tenemos ya instalada. Esto ya lo tuviste que hacer para Cocoapods, amiguito.

$ gem install helios

Si todo ha ido correctamente, ya puedes crear tu primera aplicacion Helios. Vete, desde el terminal, a la carpeta donde guardes tus proyectos más importantes y escribe lo siguiente para crear la aplicación MiPrimerServidorHelios:

$ helios new MiPrimerServidorHelios

Bien, la aplicación ya está creada. Si vas al finder verás una carpeta con unos cuantos ficheros dentro, pero todavía no vamos a hacer nada con ellos. Antes de nada, vamos a crear la base de datos, en local, donde se alojaran las tablas.

Helios usa PostgreSQL como motor de base de datos. Si no tienes instalada esta base de datos, mejor, basta con que vayas a la página de Postgres.app, descargues la última versión y sigas sus instrucciones.

Si ya tienes PostgreSQL, una vez creada la aplicación, para crear su base de datos hay que escribir lo siguiente en el terminal:

$ createdb -h localhost MiPrimerServidorHelios

Y ahora si, ya podríamos entrar en la carpeta de nuestra aplicación MiPrimerServidorHelios y arrancar el servidor:

 $ cd MiPrimerServidorHelios $ helios server

En https://localhost:5000/admin tenemos el panel de administración de Helios. Las pestañas de Push Notification, In-App Purchases, Passbook y Newsstand muestran las tablas, sin datos, pero las muestran. Sin embargo, la pestaña de Data no muestra nada. Eso es porque todavía no hemos asociado un xcdatamodel.

Aunque en la documentación de helios hablan de hacer un link al modelo, yo prefiero la opción de incluir en el proyecto MiPrimerServidorHelios una carpeta llamada config donde, además del xcdatamodel correspondiente, dejemos otros ficheros, como el certificado .pem de nuestra aplicación para poder hacer Push Notification.

Una vez hayamos dejado en la carpeta correspondiente estos ficheros, habría que modificar el fichero config.ru para indicarle a Helios donde están estos ficheros:

require 'bundler' 
Bundler.require 

app = Helios::Application.new { 
    service :data, model: '.config/DataModel.xcdatamodel' 
    service :push_notification, apn_certificate: '.config/APN_development.pem', apn_environment: 'development' 
    service :in_app_purchase 
    service :passbook 
    service :newsstand
} 

run app

Si volvemos a arrancar la aplicación MiPrimerServidorHelios tendremos lo mismo de antes pero con las tablas de nuestro xcdatamodel y la posibilidad de enviar notificaciones PUSH. Ya solo tendríamos que empezar a usar estos servicios desde nuestra aplicación iOS.

No me digáis que no merece la pena echarle un vistazo a Helios!!!!

Sobre el autor: 

Javi Moreno (a.k.a. @jmoreno78) lleva más de diez años desarrollando software in-house para una compañía de seguros, principalmente en entorno mainframe. En sus ratos libres se dedica a explorar otros mundos relacionados con la programación como el desarrollo móvil para dispositivos iOS o el desarrollo web en Ruby on Rails.