Spark is een van de populairste e-mail apps die gratis beschikbaar zijn op iPhone, iPad, Mac en Apple Watch. Voor de miljoenen gebruikers op het Android-platform, de tijd dat Spark helpt u liefde uw e-mail is niet erg ver. In de tussentijd, we willen delen met u een ongelooflijke nieuwe toolchain die we hebben gemaakt dat neemt de pijn en gedoe van het werken met Swift voor Android. Deze toolchain helpt dev-teams gebruik maken van de code die ze hebben geschreven voor de iOS of Mac-platforms om grote Android-toepassingen te maken.

de apple Swift-compiler heeft de mogelijkheid om code te compileren voor het Android-platform voor een paar jaar nu, maar het heeft niet veel vrienden gemaakt in de ontwikkelaar gemeenschap vanwege de complexiteit. Onze toolchain is ontworpen om dit probleem op te lossen door de complexiteit en hoofdpijn uit het proces te halen, zodat u zich kunt concentreren op het bouwen van geweldige apps voor uw gebruikers.

toen we begonnen te werken aan de ontwikkeling van de Android-versie van Spark, waren we op zoek naar een cross-platform taal die kan worden gebruikt voor zowel Android & iOS ontwikkeling en zou ook gemakkelijk te migreren van onze bestaande Objective-C codebase.Het was rond deze tijd dat Swift een open-source project werd en na een korte tijd kreeg het ook de mogelijkheid om code te compileren voor het Android platform. We onderzochten onze opties en het was voor ons vrij duidelijk dat we in die richting moesten gaan.

Hoe werkt Swift Android Compiler?

het antwoord daarop is eenvoudig: virtuele Machine op laag niveau.

de LLVM is een compilerinfrastructuur die is gebaseerd op de concepten van driefasig ontwerp met re-targetability. In eenvoudige termen betekent dit dat elke taal die een front-end LLVM compiler heeft kan worden gecompileerd voor elk doel dat een LLVM backend compiler heeft.

Google maakt al gebruik van LLVM compilers voor native Android ontwikkeling met C / C++. Dat is de reden waarom, vanuit een Android-apparaat perspectief, is er geen verschil in bibliotheken samengesteld uit C/C++ of Swift-code. Bovendien is het eigenlijk beter voor ontwikkelaars, omdat ze de meeste instrumenten die zijn gemaakt voor C/C++ development-Android profiling tools of een Android low — level debugger (met een beperking op een evaluatie van swift-code) kunnen hergebruiken.

welke kaders zijn beschikbaar?

Nou … er zijn er niet veel. We hebben alleen toegang tot SwiftCore, Dispatch en SwiftFoundation in onze toolchain. SwiftCore en Dispatch zijn grotendeels identiek aan iOS en Mac-versies. Maar SwiftFoundation aan de andere kant is niet dezelfde basis die Apple gebruikt voor zijn eigen platforms; het is een herimplementatie van alle klassen uit de oorspronkelijke bibliotheek. Daarom ontbreekt SwiftFoundation nog steeds enkele functies, maar het dekt alle basisbehoeften zoals het uitvoeren van netwerkverzoeken, het parsen van JSON/XML, het opslaan van gegevens op schijf, enz.

het is duidelijk dat UIKit of andere frameworks op hoog niveau niet beschikbaar zijn, dus uw Swift — app voor iOS kan niet op magische wijze draaien op Android-U kunt Swift gebruiken voor business logic code, maar u zult alle gebruikersinterface en OS afhankelijke delen specifiek voor Android moeten herschrijven.

wat zijn de beperkingen van de Swift Android Compiler?

  • op dit moment ondersteunt de Swift-compiler alleen het Android-platform ARM-v7A.
  • minimale versie van Android ondersteund is v5. 0 (Lollipop).
  • en een van de belangrijkste beperkingen is de generatie 32MB+ APK-bestanden, omdat build SwiftCode, SwiftFoundation en libDispatch moet bevatten.

introductie van de Swift Android Toolchain

een van de grootste obstakels bij het gebruik van Swift compiler voor Android is het gebrek aan officiële ondersteuning van Apple, wat betekent dat er geen continue integraties of officiële builds zijn. We realiseerden ons dat we de vele problemen die aanwezig zijn in het ontwikkelen van Swift voor Android konden optimaliseren en tegelijkertijd de ervaring voor onze ontwikkelaars op dit gebied konden verbeteren. We wilden voorkomen dat alle hoofdpijn die Android-ontwikkelaars meestal te lijden hebben bij het werken met deze tools.

daarom hebben we de Swift Android Toolchain — een verzameling tools die Android-ontwikkelaars de mogelijkheid biedt om Swift comfortabel en zonder gedoe in hun projecten te gebruiken. Het is een open-source project gebaseerd op Apple Swift compiler en SwiftJava en SwiftAndroid projecten. Je kunt de toolchain direct downloaden vanuit Bintray (alleen Mac) of zelf compileren vanuit GitHub.

we gebruiken momenteel de gevorkte versie van Swift. Onze fork bevat optie om @objc en dynamische functies in compiler uit te schakelen omdat het niet goed werkt op niet-Darwin platforms. Het bevat ook enkele kleine fixes. We werken eraan om de officiële Swift repository in de toekomst te kunnen gebruiken.

verder gebruiken we Swift Package Manager (SPM) als het bouwsysteem voor Swift. Het is het bouwsysteem dat Apple gebruikt in de compiler en andere Swift-bibliotheken. Deze tool biedt de mogelijkheid om afhankelijkheden te verbinden, code te compileren, artefacten (dynamische bibliotheken of uitvoerbare bestanden) te koppelen en tests uit te voeren. Samen met onze toolchain, bieden we scripts voor SPM die alle processen van de ontwikkeling en het testen van Android-apps zal automatiseren.

Gradle plugin

natuurlijk is het geweldig om Swift-code te bouwen vanaf de opdrachtregel, maar het is gewoon natuurlijker voor Android-ontwikkelaars om de Android Studio IDE te gebruiken. Gelukkig maakt de Android IDE gebruik van een zeer flexibel build-systeem genaamd ‘Gradle’.

we hebben een Gradle-plugin gemaakt voor het toevoegen van een Swift compilatie-build-stap. Het geeft ons de mogelijkheid om gemengde Swift/Java/Kotlin projecten te bouwen met slechts één knop.

JVM interoperabiliteit

alle Android-toepassingen draaien op de Java virtuele Machine. In het geval dat een ontwikkelaar de voorkeur geeft aan native code (C / C++), moeten ze de bibliotheek in een app laden en ermee communiceren via de Java Native Interface (JNI). Swift is geen uitzondering. Dus, voor het gebruik van Swift code in JVM, moeten we de bibliotheken laden en een JNI bridge schrijven.

het is geheel aan u welke JVM-taal (Java of Kotlin) u gebruikt en hoe u de overbruggingscode schrijft, maar we raden u aan een kijkje te nemen op onze Swift Annotatieprocessor die alle JNI-code genereert van de Java-klassen en interfaces.

Blueprint project

het Android team van Readdle heeft een voorbeeld Swift applicatie gemaakt voor het uitproberen van de Swift Android Toolchain in actie. Als u wilt proberen Swift voor Android, Dit is een uitstekend project om mee te beginnen. De Blueprint project is een eenvoudige to-do app met business logica geschreven in Swift, terwijl de UI werd gedaan in Java.

testen

het Swift-project bevat al een testkader genaamd XCTest en het kan al worden gebruikt voor het testen van Swift-code op Android-platform. De Swift Package Manager maakt het samenstellen van tests in een fat binair uitvoerbaar; daarna kunnen ontwikkelaars binair uitvoerbaar op Android-apparaten uploaden en uitvoeren via de Android shell.

BONUS: onze toolchain automatiseert alle stadia van dit testproces. En het blauwdruk project bevat enkele eenvoudige tests voor u om te proberen.

wat volgt?

we hebben nog veel te doen voor Swift toolchain:

  • ARM64 compiler (voorlopige deadline: augustus 2019)
  • X86, x86_64 compiler (Chromebooks-ondersteuning)
  • LLDB met Swift-ondersteuning: client en server

we hopen dat onze Swift Android Toolchain u zal helpen om uw ontwikkelingsproces eenvoudig en probleemloos te maken. De Swift taal is sterk evolueert in de afgelopen paar jaar en ontwikkelaars die al code voor de iOS en Mac-platforms met behulp van Swift kan nu gemakkelijk Android op hun radar te.

bronnen

  1. aan de slag met Swift op Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. de architectuur van Open Source-toepassingen: 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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.