Spark ist eine der beliebtesten E-Mail-Apps, die kostenlos auf iPhone, iPad, Mac und Apple Watch verfügbar ist. Für die Millionen von Benutzern auf der Android-Plattform ist die Zeit, in der Spark Ihnen hilft, Ihre E-Mails zu lieben, nicht sehr weit. In der Zwischenzeit möchten wir Ihnen eine unglaubliche neue Toolchain vorstellen, die Ihnen die Arbeit mit Swift für Android erleichtert. Diese Toolchain hilft Entwicklerteams, den Code, den sie für die iOS- oder Mac-Plattformen geschrieben haben, zu verwenden, um großartige Android-Anwendungen zu erstellen.

Der Apple Swift Compiler kann seit einigen Jahren Code für die Android-Plattform kompilieren, hat jedoch aufgrund seiner Komplexität nicht viele Freunde in der Entwicklergemeinschaft gefunden. Unsere Toolchain wurde entwickelt, um dieses Problem zu lösen, indem die Komplexität und Kopfschmerzen aus dem Prozess genommen werden, sodass Sie sich auf die Erstellung großartiger Apps für Ihre Benutzer konzentrieren können.

Als wir mit der Entwicklung der Android-Version von Spark begannen, suchten wir nach einer plattformübergreifenden Sprache, die sowohl für die Android & iOS-Entwicklung verwendet werden kann als auch einfach von unserer vorhandenen Objective-C-Codebasis migriert werden kann.

Ungefähr zu dieser Zeit wurde Swift zu einem Open-Source-Projekt und nach kurzer Zeit konnte es auch Code für die Android-Plattform kompilieren. Wir haben unsere Möglichkeiten ausgelotet und es war für uns ziemlich offensichtlich, dass wir uns in diese Richtung bewegen sollten.

Wie funktioniert der Swift Android Compiler?

Die Antwort darauf ist einfach: Low-Level Virtual Machine.

Die LLVM ist eine Compilerinfrastruktur, die auf den Konzepten des Dreiphasendesigns mit Re-Targetability basiert. In einfachen Worten bedeutet dies, dass jede Sprache, die über einen Front-End-LLVM-Compiler verfügt, für jedes Ziel kompiliert werden kann, das über einen LLVM-Backend-Compiler verfügt.

Google nutzt bereits LLVM-Compiler für die native Android-Entwicklung mit C / C ++. Aus diesem Grund gibt es aus Sicht eines Android-Geräts keinen Unterschied zwischen Bibliotheken, die aus C / C ++ – oder Swift-Code kompiliert wurden. Darüber hinaus ist es für Entwickler tatsächlich besser, da sie die meisten Instrumente, die für die C / C ++ – Entwicklung erstellt wurden, wiederverwenden können — Android-Profiling-Tools oder einen Android-Low-Level-Debugger (mit einer Einschränkung der Auswertung von Swift-Code).

Welche Frameworks sind verfügbar?

Nun … es gibt nicht viele. Wir haben nur Zugriff auf SwiftCore, Dispatch und SwiftFoundation in unserer Toolchain. SwiftCore und Dispatch sind weitgehend identisch mit iOS- und Mac-Versionen. Aber SwiftFoundation auf der anderen Seite ist nicht die gleiche Grundlage, die Apple für seine eigenen Plattformen verwendet; es ist eine Neuimplementierung aller Klassen aus der ursprünglichen Bibliothek. Aus diesem Grund fehlen SwiftFoundation noch einige Funktionen, aber es deckt alle grundlegenden Anforderungen ab, z. B. das Ausführen von Netzwerkanforderungen, das Analysieren von JSON / XML, das Speichern von Daten auf der Festplatte usw.

Offensichtlich sind UIKit oder andere High-Level-Frameworks nicht verfügbar, sodass Ihre Swift-App für iOS nicht auf magische Weise auf Android ausgeführt werden kann.

Was sind die Einschränkungen des Swift Android Compilers?

  • Derzeit unterstützt der Swift-Compiler nur die ARM-v7A-Android-Plattform.
  • Die unterstützte Mindestversion von Android ist v5.0 (Lollipop).
  • Und eine der wichtigsten Einschränkungen ist die Generierung von 32 MB + APK-Dateien, da Build SwiftCode, SwiftFoundation und libDispatch enthalten sollte.

Einführung der Swift Android Toolchain

Eine der größten Hürden bei der Verwendung von Swift Compiler für Android ist der Mangel an offizieller Unterstützung von Apple, was bedeutet, dass es keine kontinuierlichen Integrationen oder keine offiziellen Builds gibt. Wir haben erkannt, dass wir die vielen Probleme bei der Entwicklung in Swift für Android optimieren und gleichzeitig die Erfahrung für unsere Entwickler in diesem Bereich verbessern können. Wir wollten alle Kopfschmerzen vermeiden, unter denen Android-Entwickler normalerweise leiden müssen, wenn sie mit diesen Tools arbeiten.

Aus diesem Grund haben wir die Swift Android Toolchain — eine Sammlung von Tools, mit denen Android-Entwickler Swift bequem und problemlos in ihren Projekten verwenden können. Es ist ein Open-Source-Projekt basierend auf Apple Swift Compiler und SwiftJava und SwiftAndroid Projekte. Sie können die Toolchain direkt von Bintray (nur Mac) herunterladen oder selbst von GitHub kompilieren.

Wir verwenden derzeit eine gegabelte Version von Swift. Unsere Gabel enthält die Option, @objc und dynamische Funktionen im Compiler zu deaktivieren, da sie auf Nicht-Darwin-Plattformen nicht ordnungsgemäß funktionieren. Es enthält auch einige kleinere Korrekturen. Wir arbeiten daran, in Zukunft das offizielle Swift-Repository verwenden zu können.

Darüber hinaus verwenden wir Swift Package Manager (SPM) als Build-System für Swift. Es ist das Build-System, das Apple im Compiler und in anderen Swift-Bibliotheken verwendet. Dieses Tool bietet die Möglichkeit, Abhängigkeiten zu verbinden, Code zu kompilieren, Artefakte (dynamische Bibliotheken oder ausführbare Dateien) zu verknüpfen und Tests auszuführen. Zusammen mit unserer Toolchain stellen wir Skripte für SPM zur Verfügung, die alle Prozesse der Entwicklung und des Testens von Android-Apps automatisieren.

Gradle Plugin

Natürlich ist es großartig, Swift-Code über die Befehlszeile zu erstellen, aber für Android-Entwickler ist es einfach natürlicher, die Android Studio-IDE zu verwenden. Glücklicherweise verwendet die Android-IDE ein sehr flexibles Build-System namens ‚Gradle‘.

Wir haben ein Gradle-Plugin zum Hinzufügen eines Swift-Kompilierungsschritts erstellt. Es gibt uns die Möglichkeit, gemischte Swift / Java / Kotlin-Projekte mit nur einer Schaltfläche zu erstellen.

JVM-Interoperabilität

Alle Android-Anwendungen werden in der Java Virtual Machine ausgeführt. Falls Entwickler nativen Code (C / C ++) bevorzugen, müssen sie die Bibliothek in eine App laden und über die Java Native Interface (JNI) damit interagieren. Swift ist keine Ausnahme. Um Swift-Code in JVM zu verwenden, sollten wir daher die Bibliotheken laden und eine JNI-Bridge schreiben.

Es liegt ganz bei Ihnen, welche JVM-Sprache (Java oder Kotlin) Sie verwenden und wie Sie den Bridging-Code schreiben, aber wir empfehlen Ihnen, sich unseren Swift Annotation Processor anzusehen, der den gesamten JNI-Code aus den Java-Klassen und -Schnittstellen generiert.

Blueprint-Projekt

Das Android-Team von Readdle hat eine Swift-Beispielanwendung erstellt, mit der Sie die Swift-Android-Toolchain in Aktion ausprobieren können. Wenn Sie Swift für Android ausprobieren möchten, ist dies zunächst ein hervorragendes Projekt. Das Blueprint-Projekt ist eine einfache To-Do-App mit in Swift geschriebener Geschäftslogik, während die Benutzeroberfläche in Java erstellt wurde.

Testen

Das Swift-Projekt enthält bereits ein Testframework namens XCTest und kann bereits zum Testen von Swift-Code auf der Android-Plattform verwendet werden. Der Swift-Paketmanager ermöglicht das Kompilieren von Tests in einer ausführbaren Fat-Binärdatei. Danach können Entwickler ausführbare Binärdateien auf Android-Geräten hochladen und über die Android-Shell ausführen.

BONUS: Unsere Toolchain automatisiert alle Phasen dieses Testprozesses. Und das Blueprint-Projekt enthält einige einfache Tests, die Sie ausprobieren können.

Was kommt als nächstes?

Wir haben noch viel zu tun für Swift Toolchain:

  • ARM64-Compiler (vorläufige Frist: August 2019)
  • X86, X86_64-Compiler (Chromebooks-Unterstützung)
  • LLDB mit Swift-Unterstützung: client und Server

Wir hoffen, dass unsere Swift Android Toolchain Ihnen dabei hilft, Ihren Entwicklungsprozess einfach und problemlos zu gestalten. Die Swift-Sprache hat sich in den letzten Jahren stark weiterentwickelt, und Entwickler, die bereits mit Swift für die iOS- und Mac-Plattformen programmieren, können jetzt auch Android problemlos auf dem Radar haben.

Quellen

  1. Erste Schritte mit Swift auf Android https://github.com/apple/swift/blob/master/docs/Android.md
  2. Die Architektur von Open-Source-Anwendungen: 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.