Spark è una delle app di posta elettronica più popolari disponibili gratuitamente su iPhone, iPad, Mac e Apple Watch. Per i milioni di utenti sulla piattaforma Android, il momento in cui Spark ti aiuta ad amare la tua email non è molto lontano. Nel frattempo, vogliamo condividere con voi un incredibile nuova toolchain che abbiamo creato che prende il dolore e fastidi di lavorare con Swift per Android. Questa toolchain aiuta i team di sviluppo a utilizzare il codice che hanno scritto per le piattaforme iOS o Mac per creare fantastiche applicazioni Android.

Il compilatore Swift di Apple ha avuto la capacità di compilare codice per la piattaforma Android per alcuni anni, ma non ha fatto molti amici nella comunità degli sviluppatori a causa della sua complessità. La nostra toolchain è stata progettata per risolvere questo problema eliminando la complessità e il mal di testa del processo, in modo da poterti concentrare sulla creazione di app eccezionali per i tuoi utenti.

Quando abbiamo iniziato a lavorare allo sviluppo della versione Android di Spark, stavamo cercando un linguaggio multipiattaforma che potesse essere utilizzato sia per lo sviluppo di Android & iOS e sarebbe anche facile migrare dalla nostra base di codice Objective-C esistente.

Fu in questo periodo che Swift divenne un progetto open-source e dopo un breve periodo, ottenne anche la possibilità di compilare codice per la piattaforma Android. Abbiamo esplorato le nostre opzioni ed era abbastanza ovvio per noi che dovremmo muoverci in quella direzione.

Come funziona Swift Android Compiler?

La risposta è semplice: macchina virtuale di basso livello.

LLVM è un’infrastruttura del compilatore che si basa sui concetti di progettazione trifase con ri-targetability. In termini semplici, ciò significa che qualsiasi linguaggio che abbia un compilatore LLVM front-end può essere compilato per qualsiasi destinazione che abbia un compilatore back-end LLVM.

Google fa già uso di compilatori LLVM per lo sviluppo nativo di Android con C / C++. Ecco perché, dal punto di vista del dispositivo Android, non vi è alcuna differenza nelle librerie compilate da C/C++ o codice Swift. Inoltre, in realtà è meglio per gli sviluppatori, perché possono riutilizzare la maggior parte degli strumenti creati per lo sviluppo C/C++ — strumenti di profilazione Android o un debugger di basso livello Android (con una limitazione su una valutazione del codice swift).

Quali framework sono disponibili?

Beh Well non ce ne sono molti. Abbiamo accesso solo a SwiftCore, Dispatch e SwiftFoundation nella nostra toolchain. SwiftCore e Dispatch sono in gran parte identici alle versioni iOS e Mac. Ma SwiftFoundation d’altra parte non è la stessa Base che Apple utilizza per le proprie piattaforme; è una ri-implementazione di tutte le classi dalla libreria originale. Ecco perché a SwiftFoundation mancano ancora alcune funzionalità, ma copre tutte le esigenze di base come l’esecuzione di richieste di rete, l’analisi di JSON/XML, la memorizzazione dei dati su disco, ecc.

Ovviamente UIKit o qualsiasi framework di alto livello non sono disponibili, quindi la tua app Swift per iOS non può magicamente funzionare su Android — puoi usare Swift per il codice di logica aziendale, ma dovrai riscrivere tutte le parti dipendenti dall’interfaccia utente e dal sistema operativo specificamente per Android.

Quali sono i limiti del compilatore Swift Android?

  • Al momento, il compilatore Swift supporta solo la piattaforma Android ARM-v7A.
  • Versione minima di Android supportato è v5.0 (Lollipop).
  • E una delle limitazioni più significative è la generazione di file APK da 32 MB+, perché la build dovrebbe includere SwiftCode, SwiftFoundation e libDispatch.

Presentazione della Toolchain Swift Android

Uno dei maggiori ostacoli nell’utilizzo di Swift compiler per Android è la mancanza di supporto ufficiale da parte di Apple, il che significa che nessuna integrazione continua o nessuna build ufficiale. Ci siamo resi conto che potevamo ottimizzare i molti dei fastidi presenti nello sviluppo in Swift per Android e, allo stesso tempo, migliorare l’esperienza per i nostri sviluppatori in questo settore. Volevamo evitare tutti i mal di testa che gli sviluppatori Android in genere devono soffrire quando si lavora con questi strumenti.

Ecco perché abbiamo la Toolchain Swift Android — una raccolta di strumenti che offre agli sviluppatori Android la possibilità di utilizzare Swift nei loro progetti comodamente e senza problemi. Si tratta di un progetto open-source basato su Apple Swift compiler e SwiftJava e SwiftAndroid progetti. Puoi scaricare la toolchain direttamente da Bintray (solo Mac) o compilare da solo da GitHub.

Attualmente stiamo utilizzando la versione biforcuta di Swift. Il nostro fork contiene l’opzione per disabilitare @ objc e le funzionalità dinamiche nel compilatore perché non funziona correttamente su piattaforme non Darwin. Contiene anche alcune correzioni minori. Stiamo lavorando per poter utilizzare il repository Swift ufficiale in futuro.

Inoltre, usiamo Swift Package Manager (SPM) come sistema di compilazione per Swift. È il sistema di compilazione che Apple utilizza nel compilatore e in altre librerie Swift. Questo strumento offre la possibilità di collegare dipendenze, compilare codice, collegare artefatti (librerie dinamiche o eseguibili) ed eseguire test. Insieme alla nostra toolchain, forniamo script per SPM che automatizzeranno tutti i processi di sviluppo e test delle app Android.

Gradle plugin

Naturalmente, è fantastico creare codice Swift dalla riga di comando, ma è semplicemente più naturale per gli sviluppatori Android utilizzare l’IDE di Android Studio. Fortunatamente, l’IDE Android utilizza un sistema di compilazione molto flessibile chiamato ‘Gradle’.

Abbiamo creato un plugin Gradle per l’aggiunta di una fase di compilazione rapida compilazione. Ci dà la possibilità di creare progetti misti Swift/Java/Kotlin con un solo pulsante.

Interoperabilità JVM

Tutte le applicazioni Android vengono eseguite nella macchina virtuale Java. Nel caso in cui uno sviluppatore preferisca il codice nativo (C / C++), deve caricare la libreria all’interno di un’app e interagire con essa tramite l’interfaccia nativa Java (JNI). Swift non fa eccezione. Quindi, per usare il codice Swift in JVM, dovremmo caricare le librerie e scrivere un bridge JNI.

Dipende interamente da te quale linguaggio JVM (Java o Kotlin) usi e come scrivi il codice bridging, ma ti consigliamo di dare un’occhiata al nostro processore di annotazione Swift che genera tutto il codice JNI dalle classi e dalle interfacce Java.

Progetto Blueprint

Il team Android di Readdle ha creato un’applicazione Swift di esempio per provare la Toolchain Swift Android in azione. Se vuoi provare Swift per Android, questo è un ottimo progetto per iniziare. Il progetto Blueprint è un’app semplice da fare con logica di business scritta in Swift, mentre l’interfaccia utente è stata eseguita in Java.

Test

Swift progetto già include un framework di test chiamato XCTest e può già essere utilizzato per il test codice Swift su piattaforma Android. Il gestore di pacchetti Swift consente di compilare test in un eseguibile binario fat; dopo di che, gli sviluppatori possono caricare eseguibile binario su dispositivi Android ed eseguirlo tramite la shell Android.

BONUS: La nostra toolchain automatizza tutte le fasi di questo processo di test. E il progetto Blueprint include alcuni semplici test da provare.

Quali sono le prospettive?

Abbiamo ancora molto da fare per Swift toolchain:

  • Compilatore ARM64 (scadenza provvisoria: agosto 2019)
  • X86, X86_64 compilatore (supporto Chromebooks)
  • LLDB con supporto Swift: client e server

Speriamo che la nostra Toolchain Swift Android vi aiuterà a rendere il processo di sviluppo facile e senza problemi. Il linguaggio Swift si è evoluto notevolmente negli ultimi due anni e gli sviluppatori che già codificano per le piattaforme iOS e Mac utilizzando Swift possono ora facilmente avere anche Android sul loro radar.

Sorgenti

  1. Introduzione a Swift su Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. L’architettura delle applicazioni Open Source: 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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.