Spark är en av de mest populära e-postapparna som är tillgängliga gratis på iPhone, iPad, Mac och Apple Watch. För miljontals användare på Android-plattformen är den tid då Spark hjälper dig att älska din e-post inte så långt. Sålänge, vi vill dela med dig en otrolig ny verktygskedja vi har skapat som tar smärtan och krångel av att arbeta med Swift för Android. Denna verktygskedja hjälper dev-team att använda koden de har skrivit för iOS – eller Mac-plattformarna för att skapa fantastiska Android-applikationer.

Apple Swift-kompilatorn har haft möjlighet att kompilera kod för Android-plattformen i några år nu, men det har inte fått många vänner i utvecklargemenskapen på grund av dess komplexitet. Vår verktygskedja har utformats för att lösa detta problem genom att ta komplexiteten och huvudvärk ur processen, så att du kan fokusera på att bygga bra program för dina användare.

när vi började arbeta med utvecklingen av Android-versionen av Spark letade vi efter ett plattformsspråk som kunde användas för både Android & iOS-utveckling och skulle också vara lätt att migrera från vår befintliga Objective-C-kodbas.

det var runt denna tid som Swift blev ett open source-projekt och efter en kort stund fick det också möjlighet att kompilera kod för Android-plattformen. Vi undersökte våra alternativ och det var ganska uppenbart för oss att vi skulle gå i den riktningen.

hur fungerar Swift Android kompilator?

svaret på det är enkelt: virtuell maskin på låg nivå.

LLVM är en kompilatorinfrastruktur som bygger på begreppen trefasdesign med re-targetability. Enkelt uttryckt betyder det att alla språk som har en front-end LLVM-kompilator kan kompileras för alla mål som har en LLVM-backend-kompilator.

Google använder redan LLVM-kompilatorer för inbyggd Android-utveckling med C/C++. Det är därför, från ett Android-enhetsperspektiv, det finns ingen skillnad i bibliotek som sammanställts från C/C++ eller Swift-kod. Dessutom är det faktiskt bättre för utvecklare, eftersom de kan återanvända de flesta instrument som skapades för C/C++-utveckling — Android-profileringsverktyg eller en Android-lågnivåfelsökare (med en begränsning av en utvärdering av swift-kod).

vilka ramar finns tillgängliga?

Tja … det finns inte många. Vi har bara tillgång till SwiftCore, Dispatch och SwiftFoundation i vår verktygskedja. SwiftCore och Dispatch är i stort sett identiska med iOS-och Mac-versioner. Men SwiftFoundation å andra sidan är inte samma grund som Apple använder för sina egna plattformar; det är en omimplementering av alla klasser från det ursprungliga biblioteket. Därför saknar SwiftFoundation fortfarande vissa funktioner, men det täcker alla grundläggande behov som att utföra nätverksförfrågningar, analysera JSON/XML, lagra data på disken etc.

uppenbarligen är UIKit eller några ramar på hög nivå inte tillgängliga, så din Swift — app för iOS kan inte köras magiskt på Android-Du kan använda Swift for business logic code, men du måste skriva om alla användargränssnitt och OS-beroende delar specifikt för Android.

vilka är begränsningarna för Swift Android-kompilatorn?

  • för närvarande stöder Swift-kompilatorn endast ARM-v7A Android-plattformen.
  • minsta version av Android som stöds är v5.0 (Lollipop).
  • och en av de viktigaste begränsningarna är generationen 32MB+ APK-filer, eftersom build bör innehålla SwiftCode, SwiftFoundation och libDispatch.

introduktion av Swift Android-verktygskedjan

en av de största hindren för att använda Swift compiler för Android är bristen på officiellt stöd från Apple, vilket innebär inga kontinuerliga integrationer eller inga officiella byggnader. Vi insåg att vi kunde optimera de många problem som finns i utvecklingen i Swift för Android och samtidigt förbättra upplevelsen för våra utvecklare inom detta område. Vi ville undvika alla huvudvärk som Android-utvecklare vanligtvis måste drabbas av när de arbetar med dessa verktyg.

det är därför vi har Swift Android Toolchain — en samling verktyg som ger Android-utvecklare möjligheten att använda Swift i sina projekt bekvämt och utan krångel. Det är ett open source-projekt baserat på Apple Swift compiler och SwiftJava och SwiftAndroid-projekt. Du kan ladda ner verktygskedjan direkt från Bintray (endast Mac) eller kompilera på egen hand från GitHub.

vi använder för närvarande gaffelversion av Swift. Vår gaffel innehåller möjlighet att inaktivera @objc och dynamiska funktioner i kompilatorn eftersom det inte fungerar korrekt på icke-Darwin-plattformar. Den innehåller också några mindre korrigeringar. Vi arbetar på att kunna använda officiella Swift repository i framtiden.

dessutom använder vi Swift Package Manager (SPM) som byggsystem för Swift. Det är byggsystemet som Apple använder i kompilatorn och andra Swift-bibliotek. Detta verktyg ger möjlighet att ansluta beroenden, kompilera kod, länka artefakter (dynamiska bibliotek eller körbara filer) och köra tester. Tillsammans med vår verktygskedja tillhandahåller vi skript för SPM som automatiserar alla processer för utveckling och testning av Android-appar.

Gradle plugin

naturligtvis är det bra att bygga Swift-kod från kommandoraden, men det är helt enkelt mer naturligt för Android-utvecklare att använda Android Studio IDE. Lyckligtvis använder Android IDE ett mycket flexibelt byggsystem som heter ’Gradle’.

vi skapade en Gradle plugin för att lägga till en Swift sammanställning bygga steg. Det ger oss möjlighet att bygga blandade Swift/Java/Kotlin projekt med bara en knapp.

JVM interoperabilitet

alla Android-applikationer körs i Java Virtual Machine. Om någon utvecklare föredrar inbyggd kod (C/C++) måste de ladda biblioteket i en app och interagera med det via Java Native Interface (JNI). Swift är inget undantag. Således, för att använda Swift-kod i JVM, bör vi ladda biblioteken och skriva en JNI-bro.

det är helt upp till dig vilket JVM-språk (Java eller Kotlin) du använder och hur du skriver överbryggningskoden, men vi rekommenderar att du tittar på vår Swift Annotation Processor som genererar all JNI-kod från Java-klasserna och gränssnitten.

Blueprint project

Android-teamet på Readdle har skapat ett exempel på Swift-applikation för att prova Swift Android-verktygskedjan i aktion. Om du vill prova Swift för Android är detta ett utmärkt projekt till att börja med. Blueprint-projektet är en enkel att göra-app med affärslogik skriven i Swift, medan användargränssnittet gjordes i Java.

testning

Swift-projektet innehåller redan ett testramverk som heter XCTest och det kan redan användas för att testa Swift-kod på Android-plattformen. Swift-pakethanteraren tillåter kompilering av test i en fat binär körbar; efter det kan utvecklare ladda upp binär körbar på Android-enheter och köra den via Android-skalet.

BONUS: vår verktygskedja automatiserar alla steg i denna testprocess. Och Blueprint-projektet innehåller några enkla tester som du kan prova.

Vad är nästa?

vi har fortfarande mycket att göra för Swift toolchain:

  • ARM64-kompilator (preliminär tidsfrist: augusti 2019)
  • X86, x86_64-kompilator (stöd för Chromebooks)
  • LLDB med Swift-stöd: klient och server

vi hoppas att vår Swift Android-verktygskedja hjälper dig att göra din utvecklingsprocess enkel och problemfri. Swift-språket har utvecklats kraftigt under de senaste åren och utvecklare som redan kodar för iOS-och Mac-plattformarna med Swift kan nu enkelt ha Android på sin radar också.

källor

  1. komma igång med Swift på Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. arkitekturen för Open Source-applikationer: 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

Lämna ett svar

Din e-postadress kommer inte publiceras.