Fecha de publicación

Módulos nativos para React-Native con Go (2/4)

Autores

Creación del primer módulo con Go

Pues ya estamos aquí, en esta segunda parte de esta serie de posts tan interesantes 🤥

HERE WE GO!!! (el gif introductorio que no falte)

Haremos algo rápido y sencillo para toda la familia, una función que la llamaremos de manera síncrona y otra de manera asíncrona para tener ambos casos contemplados (esta serie de posts no trata de realizar un módulo de dificultad avanzada ya que no es lo que toca ahora mismo).

código del módulo que usaremos(sumar en js es muy complicado 🌚): Go module sample

tests (super exhaustivos oiga 🧐): Go test module sample

Cosas a tener en cuenta, tenemos restricción de tipos si vamos de esta manera(parte 3 bridge) ya que solo nos permite jugar con estos actualmente:

Restricted types

Tips/Consejitos de la abuela:

  • Si compiláis y luego no os aparece en vuestro módulo la función que estabais esperando obtener probablemente sea por problemas de tipado en el return de la función, así que "caution" con esto!! ⚠️⚠️

  • Si os encontráis en una encrucijada y si o si debéis pasar algo que no esté soportado podéis hacer un stringify o pasarlo a un array de bytes el resultado final, luego acordaos de revertir el cambio en cada plataforma! (algo es algo 🤷‍♂️)

A mi me ha pasao'!!

Una vez tengamos nuestro código bien "testeadito" y queramos compilar ya todo esto, haremos uso del paquete que nos proporciona Golang "gomobile" así que si no lo tienes instalado, a qué esperas!?

$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init

Que lo queremos compilar para Android? mú' fácil!

gomobile bind [-x -v] -target=android $YOUR_FILE_PATH

Que lo queremos compilar para iOS? mú' fácil también!

gomobile bind [-x -v] -target=ios $YOUR_FILE_PATH
  • [-x -v]: vienen bien para hacer un seguimiento de como esta yendo el proceso de compilación, básicamente -x nos muestra que comandos realiza y -v pues de verbose, ya sabéis, que te lo muestra todo por la consola (ni la RAE con esta definición).

  • $YOUR_FILE_PATH: fichero de entrada (el compilador ya se encargará de buscar las referencias de otros archivos o librerías que estemos usando), si tenéis problemas compilando esto recomiendo que lo metáis en la "carpetita" ~go/src/github.com/NOMBRE_DE_TU_PAQUETE/NOMBRE_DEL_MAIN

Una vez ejecutado estos comandos (si no tienes mac solo puedes hacerlo para Android, o comprarte un mac y seguir la serie desde él, solo son 3mil eurillos de nada!!) tendremos en nuestra carpeta 3 nuevos archivos:

Android:

  • /**/.aar
  • /**/-sources.jar

iOS

  • /**/.framework

Ahora viene la parte divertida, que es incluir los SDK's en sus correspondientes plataformas

Aguita lo que se nos viene

(si solo te interesa la parte de Android, llévame allí)

iOS

Abrimos nuestro gran amigo XCode y seleccionamos nuestro proyecto (.xcworkspace) o desde nuestro proyecto en RN ```sh open $path_de_tu_.xcworkspace


Para iOS es mucho mas sencillo que Android, hay menos pasos a realizar para poder vincular el módulo a nuestro proyecto

Arrastramos nuestro archivo _.framework_ a nuestro proyecto, siempre dentro del proyecto!

Automáticamente se nos vinculara el path con el que utiliza para compilar y hacer build, así que no nos debemos de preocupar de añadir la ruta manualmente (puede llegar a ser una odisea este tipo de tareas 🥵).

![iOS d&d framework](https://thepracticaldev.s3.amazonaws.com/i/bao8q3xg8hdnwyg9eqse.png)

# Android <a name="android"></a>

(Voy a usar Android-Studio para esto)

Abrimos el proyecto android que tenemos en nuestro proyecto de RN y nos vamos directos a: _File > New > New Module..._


![New android module](https://thepracticaldev.s3.amazonaws.com/i/jbjyqq5maafqtszztyne.png)


Se nos abrirá esta nueva ventana y seleccionamos _Import .JAR/.AAR Package_

![Import JAR/AAR](https://thepracticaldev.s3.amazonaws.com/i/519ysevoug9x6oic5t8i.png)

Habrá que hacer esto 2 veces para importar ambos archivos

![JARAAR](https://thepracticaldev.s3.amazonaws.com/i/x0cfgkwygppsz16ji2cc.png)

Una vez los tengamos importados ambos, nos vamos a: _File > Project Structure... > Modules > app > Dependencies > Add Module dependency_

![Importar al proyecto el sdk](https://thepracticaldev.s3.amazonaws.com/i/zq8c4dwucbh8jih8kx9l.png)

Nos debería de salir ambos archivos importados, los seleccionamos y OK.

![Ya casi tenemos Android vava!!](https://thepracticaldev.s3.amazonaws.com/i/ip2003i8p88gprru2vuy.png)

Se nos sincronizará el proyecto y ya tendremos añadido el módulo en nuestro proyecto y listo para empezar con la parte de RN en la parte 3 ✌️

## Y hasta aquí este capítulo 2, bastante turra por hoy

Si has llegado hasta aquí y quieres dejar tu opinión sobre algo, tienes alguna duda o tienes problemas no dudes en hacérmelo saber!!

links de referencia: 

https://godoc.org/golang.org/x/mobile/cmd/gomobile

https://godoc.org/golang.org/x/mobile/cmd/gobind

https://github.com/golang/go/wiki/Mobile#sdk-applications-and-generating-bindings

## Nos vemos en la próxima entrega!!! 🥰

![Comments here boiz!!](https://media.giphy.com/media/Js7cqIkpxFy0bILFFA/giphy.gif)