Spark es una de las aplicaciones de correo electrónico más populares disponibles de forma gratuita en iPhone, iPad, Mac y Apple Watch. Para los millones de usuarios de la plataforma Android, el momento en que Spark te ayuda a amar tu correo electrónico no está muy lejos. Mientras tanto, queremos compartir con ustedes una increíble cadena de herramientas nueva que hemos creado que elimina el dolor y las molestias de trabajar con Swift para Android. Esta cadena de herramientas ayuda a los equipos de desarrollo a utilizar el código que han escrito para las plataformas iOS o Mac para crear excelentes aplicaciones Android.

El compilador Swift de Apple ha tenido la capacidad de compilar código para la plataforma Android desde hace unos años, pero no ha hecho muchos amigos en la comunidad de desarrolladores debido a su complejidad. Nuestra cadena de herramientas se diseñó para resolver este problema eliminando la complejidad y los dolores de cabeza del proceso, para que pueda centrarse en crear excelentes aplicaciones para sus usuarios.

Cuando empezamos a trabajar en el desarrollo de la versión para Android de Spark, estábamos buscando un lenguaje multiplataforma que pudiera usarse para el desarrollo de Android & iOS y que también fuera fácil de migrar desde nuestra base de código Objective-C existente.

Fue en esta época que Swift se convirtió en un proyecto de código abierto y, después de un corto tiempo, también obtuvo la capacidad de compilar código para la plataforma Android. Exploramos nuestras opciones y para nosotros era bastante obvio que debíamos avanzar en esa dirección.

¿Cómo funciona el compilador Swift para Android?

La respuesta a eso es simple: Máquina Virtual de bajo nivel.

El LLVM es una infraestructura de compiladores que se basa en los conceptos de diseño trifásico con capacidad de reorientación. En términos simples, esto significa que cualquier lenguaje que tenga un compilador LLVM front-end se puede compilar para cualquier destino que tenga un compilador de back-end LLVM.

Google ya hace uso de LLVM compiladores para Android nativo desarrollo con C/C++. Es por eso que, desde la perspectiva de un dispositivo Android, no hay diferencia en las bibliotecas compiladas a partir de código C/C++ o Swift. Además, en realidad es mejor para los desarrolladores, ya que pueden reutilizar la mayoría de los instrumentos que se crearon para el desarrollo de C/C++: herramientas de generación de perfiles de Android o un depurador de bajo nivel de Android (con una limitación en la evaluación del código swift).

¿Qué frameworks están disponibles?

Bueno’t no hay muchos. Solo tenemos acceso a SwiftCore, Dispatch y SwiftFoundation en nuestra cadena de herramientas. SwiftCore y Dispatch son en gran medida idénticos a las versiones de iOS y Mac. Pero SwiftFoundation, por otro lado, no es la misma Base que Apple usa para sus propias plataformas; es una reimplementación de todas las clases de la biblioteca original. Es por eso que SwiftFoundation todavía carece de algunas características, pero cubre todas las necesidades básicas, como realizar solicitudes de red, analizar JSON/XML, almacenar datos en disco, etc.

Obviamente, UIKit o cualquier framework de alto nivel no están disponibles, por lo que su aplicación Swift para iOS no puede ejecutarse mágicamente en Android: puede usar el código de lógica Swift para negocios, pero tendrá que reescribir todas las partes dependientes de la interfaz de usuario y del sistema operativo específicamente para Android.

¿Cuáles son las limitaciones del compilador Swift para Android?

  • Por el momento, el compilador Swift solo es compatible con la plataforma Android ARM-v7A.
  • La versión mínima de Android compatible es v5. 0 (piruleta).
  • Y una de las limitaciones más importantes es la generación de archivos APK de 32 MB+, porque la compilación debe incluir SwiftCode, SwiftFoundation y libDispatch.

Presentación de la cadena de herramientas Swift para Android

Uno de los mayores obstáculos para usar Swift compiler para Android es la falta de soporte oficial de Apple, lo que significa que no hay integraciones continuas ni compilaciones oficiales. Nos dimos cuenta de que podíamos optimizar muchos de los problemas presentes en el desarrollo de Swift para Android y, al mismo tiempo, mejorar la experiencia de nuestros desarrolladores en esta área. Queríamos evitar todos los dolores de cabeza que los desarrolladores de Android suelen tener que sufrir cuando trabajan con estas herramientas.

Es por eso que tenemos la cadena de herramientas Swift para Android, una colección de herramientas que brinda a los desarrolladores de Android la capacidad de usar Swift en sus proyectos de forma cómoda y sin problemas. Es un proyecto de código abierto basado en el compilador Swift de Apple y los proyectos SwiftJava y SwiftAndroid. Puedes descargar la cadena de herramientas directamente desde Bintray (solo para Mac) o compilar por tu cuenta desde GitHub.

Actualmente estamos utilizando la versión bifurcada de Swift. Nuestra bifurcación contiene la opción de deshabilitar @objc y las características dinámicas en el compilador porque no funciona correctamente en plataformas que no son Darwin. También contiene algunas correcciones menores. Estamos trabajando para poder utilizar el repositorio oficial de Swift en el futuro.

Además, utilizamos Swift Package Manager (SPM) como sistema de compilación para Swift. Es el sistema de compilación que Apple utiliza en el compilador y en otras bibliotecas de Swift. Esta herramienta proporciona la capacidad de conectar dependencias, compilar código, vincular artefactos (bibliotecas dinámicas o ejecutables) y ejecutar pruebas. Junto con nuestra cadena de herramientas, proporcionamos scripts para SPM que automatizarán todos los procesos de desarrollo y prueba de aplicaciones Android.

Complemento de Gradle

Por supuesto, es genial crear código Swift desde la línea de comandos, pero es simplemente más natural para los desarrolladores de Android usar el IDE de Android Studio. Afortunadamente, el IDE de Android utiliza un sistema de compilación muy flexible llamado ‘Gradle’.

Creamos un complemento de Gradle para agregar un paso de compilación de compilación Rápida. Nos da la capacidad de construir proyectos mixtos Swift / Java / Kotlin con un solo botón.

Interoperabilidad de JVM

Todas las aplicaciones de Android se ejecutan en la máquina virtual Java. En caso de que cualquier desarrollador prefiera código nativo (C / C++), debe cargar la biblioteca dentro de una aplicación e interactuar con ella a través de la Interfaz Nativa de Java (JNI). Swift no es una excepción. Por lo tanto, para usar código Swift en JVM, debemos cargar las bibliotecas y escribir un puente JNI.

Depende completamente de usted qué lenguaje JVM (Java o Kotlin) utilice y cómo escriba el código de puente, pero le recomendamos que eche un vistazo a nuestro Procesador de anotación Swift que genera todo el código JNI a partir de las clases e interfaces Java.

Proyecto Blueprint

El equipo de Android de Readdle ha creado una aplicación Swift de ejemplo para probar la cadena de herramientas Swift para Android en acción. Si quieres probar Swift para Android, este es un excelente proyecto para empezar. El proyecto Blueprint es una aplicación sencilla de tareas con lógica de negocios escrita en Swift, mientras que la interfaz de usuario se realizó en Java.

Pruebas

El proyecto Swift ya incluye un marco de pruebas llamado XCTest y ya se puede usar para probar el código Swift en la plataforma Android. El Administrador de paquetes Swift permite compilar pruebas en un ejecutable binario fat; después de eso, los desarrolladores pueden cargar ejecutables binarios en dispositivos Android y ejecutarlos a través del shell de Android.

BONUS: Nuestro conjunto de herramientas automatiza todas las etapas de este proceso de pruebas. Y el proyecto Blueprint incluye algunas pruebas simples para que las pruebes.

¿Qué sigue?

Todavía tenemos mucho que hacer para Swift toolchain:

  • Compilador ARM64 (fecha límite provisional: agosto de 2019)
  • Compilador X86, X86_64 (compatibilidad con Chromebooks)
  • LLDB con compatibilidad con Swift: cliente y servidor

Esperamos que nuestra cadena de herramientas Swift para Android le ayude a hacer que su proceso de desarrollo sea fácil y sin complicaciones. El lenguaje Swift ha evolucionado mucho en los últimos años y los desarrolladores que ya codifican para las plataformas iOS y Mac que usan Swift ahora también pueden tener Android en su radar fácilmente.

Sources

  1. Primeros pasos con Swift en Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. La Arquitectura de las Aplicaciones de Código Abierto: LLVM http://www.aosabook.org/en/llvm.html
  3. Swift Android Toolchain https://github.com/readdle/swift-android-toolchain
  4. Swift Android Buildtools https://github.com/readdle/swift-android-buildtools
  5. Gradle plugin for building Swift code for Android https://github.com/readdle/swift-android-gradle
  6. Swift Java Code generation annotation processor https://github.com/readdle/swift-java-codegen
  7. Swift Android Blueprint project https://github.com/readdle/swift-android-architecture

Deja una respuesta

Tu dirección de correo electrónico no será publicada.