Spark jest jedną z najpopularniejszych aplikacji e-mail dostępnych za darmo na iPhone’ a, iPada, Maca, a także Apple Watch. Dla milionów użytkowników platformy Android czas, w którym Spark pomaga kochać pocztę e-mail, nie jest bardzo długi. W międzyczasie chcemy podzielić się z wami niesamowitym nowym toolchainem, który usuwa ból i kłopoty związane z pracą z Swift dla Androida. Ten łańcuch narzędzi pomaga zespołom programistów wykorzystać kod, który napisali na platformy iOS lub Mac, aby stworzyć świetne aplikacje na Androida.

kompilator Apple Swift ma możliwość kompilowania kodu dla Platformy Android od kilku lat, ale nie zyskał wielu przyjaciół w społeczności programistów ze względu na swoją złożoność. Nasz łańcuch narzędzi został zaprojektowany, aby rozwiązać ten problem, eliminując złożoność i bóle głowy, dzięki czemu możesz skupić się na tworzeniu świetnych aplikacji dla swoich użytkowników.

kiedy zaczęliśmy pracować nad wersją Spark na Androida, szukaliśmy języka wieloplatformowego, który mógłby być używany zarówno dla Androida & iOS, jak i byłby łatwy do migracji z naszej istniejącej bazy kodu Objective-C.

mniej więcej w tym czasie Swift stał się projektem open-source, a po krótkim czasie uzyskał również możliwość kompilowania kodu na platformę Android. Zbadaliśmy nasze możliwości i było dla nas oczywiste, że powinniśmy iść w tym kierunku.

jak działa Swift Android Compiler?

odpowiedź na to pytanie jest prosta: maszyna wirtualna niskiego poziomu.

LLVM jest infrastrukturą kompilatora, która opiera się na koncepcjach trójfazowego projektowania z możliwością ponownego targetowania. W prostych słowach oznacza to, że każdy język, który ma kompilator LLVM front-end, może być skompilowany dla każdego języka docelowego, który ma kompilator LLVM backend.

Google korzysta już z kompilatorów LLVM do natywnego tworzenia Androida w C / C++. Dlatego z punktu widzenia urządzeń z systemem Android nie ma różnicy w bibliotekach skompilowanych z kodu C / C++ lub Swift. Co więcej, jest to w rzeczywistości lepsze dla programistów, ponieważ mogą ponownie korzystać z większości instrumentów stworzonych dla rozwoju C / C++ – narzędzi do profilowania Androida lub niskiego poziomu debuggera Androida (z ograniczeniem oceny kodu swift).

jakie frameworki są dostępne?

cóż … nie ma ich wiele. Mamy tylko dostęp do SwiftCore, Dispatch i SwiftFoundation w naszym łańcuchu narzędzi. SwiftCore i Dispatch są w dużej mierze identyczne z wersjami iOS i Mac. Ale SwiftFoundation z drugiej strony nie jest Tym Samym fundamentem, którego Apple używa na własnych platformach; jest to ponowna implementacja wszystkich klas z oryginalnej biblioteki. Dlatego SwiftFoundation nadal brakuje niektórych funkcji, ale obejmuje wszystkie podstawowe potrzeby, takie jak wykonywanie żądań sieciowych, parsowanie JSON/XML, przechowywanie danych na dysku itp.

oczywiście UIKit lub jakiekolwiek frameworki wysokiego poziomu nie są dostępne, więc Twoja aplikacja Swift na iOS nie może magicznie działać na Androidzie-możesz użyć kodu Swift dla logiki biznesowej, ale będziesz musiał ponownie napisać wszystkie elementy interfejsu użytkownika i zależne od systemu operacyjnego specjalnie dla Androida.

jakie są ograniczenia kompilatora Swift Android?

  • w tej chwili kompilator Swift obsługuje tylko platformę ARM-v7a Android.
  • minimalna obsługiwana wersja Androida to v5 .0 (Lollipop).
  • i jednym z najbardziej znaczących ograniczeń jest generowanie plików 32MB+ APK, ponieważ build powinien zawierać SwiftCode, SwiftFoundation i libDispatch.

wprowadzenie Swift Android Toolchain

jedną z największych przeszkód w korzystaniu z Swift compiler dla Androida jest brak oficjalnego wsparcia ze strony Apple, co oznacza brak ciągłych integracji lub brak oficjalnych kompilacji. Zdaliśmy sobie sprawę, że możemy zoptymalizować wiele kłopotów obecnych w rozwoju w Swift dla Androida, a jednocześnie poprawić wrażenia naszych programistów w tej dziedzinie. Chcieliśmy uniknąć wszystkich bólów głowy, które programiści Androida zwykle muszą cierpieć podczas pracy z tymi narzędziami.

dlatego mamy Swift Android Toolchain-zbiór narzędzi, które dają programistom Androida możliwość korzystania z Swift w swoich projektach wygodnie i bez żadnych kłopotów. Jest to projekt open-source oparty na kompilatorze Apple Swift oraz projektach SwiftJava i SwiftAndroid. Możesz pobrać toolchain bezpośrednio z Bintray (tylko Mac) lub skompilować samodzielnie z GitHub.

obecnie używamy rozwidlonej wersji Swifta. Nasz fork zawiera opcję wyłączenia @objc i funkcji dynamicznych w kompilatorze, ponieważ nie działa poprawnie na platformach innych niż Darwin. Zawiera również kilka drobnych poprawek. Pracujemy nad tym, aby w przyszłości móc korzystać z oficjalnego repozytorium Swift.

ponadto używamy Swift Package Manager (SPM) jako systemu budowania dla Swift. Jest to system kompilacji, którego używa Apple w kompilatorze i innych bibliotekach Swift. To narzędzie zapewnia możliwość łączenia zależności, kompilowania kodu, łączenia artefaktów (dynamicznych bibliotek lub plików wykonywalnych) i uruchamiania testów. Wraz z naszym toolchainem udostępniamy skrypty dla SPM, które zautomatyzują wszystkie procesy tworzenia i testowania aplikacji na Androida.

Wtyczka Gradle

oczywiście wspaniale jest budować Kod Swift z wiersza poleceń, ale po prostu bardziej naturalne jest korzystanie z Android Studio IDE dla programistów. Na szczęście Android IDE używa bardzo elastycznego systemu budowania o nazwie „Gradle”.

stworzyliśmy wtyczkę Gradle do dodawania szybkiego kroku kompilacji. Daje nam to możliwość budowania mieszanych projektów Swift / Java / Kotlin za pomocą jednego przycisku.

interoperacyjność JVM

wszystkie aplikacje na Androida działają w maszynie wirtualnej Java. Jeśli programista preferuje natywny kod (C / C++), musi załadować bibliotekę do aplikacji i współdziałać z nią za pośrednictwem Java Native Interface (JNI). Swift nie jest wyjątkiem. Tak więc, aby używać kodu Swift w JVM, powinniśmy załadować biblioteki i napisać mostek JNI.

wszystko zależy od tego, jakiego języka JVM (Java lub Kotlin) używasz i jak piszesz kod pomostowy, ale zalecamy przyjrzenie się naszemu procesorowi adnotacji Swift, który generuje cały kod JNI z klas i interfejsów Java.

Blueprint project

zespół Android w Readdle stworzył przykładową aplikację Swift do wypróbowania Swift Android Toolchain w akcji. Jeśli chcesz wypróbować Swift dla Androida, jest to doskonały projekt na początek. Projekt Blueprint to prosta aplikacja z logiką biznesową napisaną w języku Swift, podczas gdy interfejs użytkownika został wykonany w Javie.

testowanie

projekt Swift zawiera już framework testowy o nazwie XCTest i może być już używany do testowania kodu Swift na platformie Android. Menedżer pakietów Swift umożliwia kompilowanie testów w jednym pliku wykonywalnym fat; następnie programiści mogą przesyłać plik wykonywalny na urządzenia z systemem Android i uruchamiać go za pośrednictwem powłoki Androida.

BONUS: nasz toolchain automatyzuje wszystkie etapy tego procesu testowania. Projekt Blueprint zawiera kilka prostych testów do wypróbowania.

co dalej?

mamy jeszcze wiele do zrobienia dla Swift toolchain:

  • kompilator ARM64 (wstępny termin: Sierpień 2019)
  • kompilator X86, x86_64 (obsługa Chromebooków)
  • LLDB z obsługą Swift: klient i serwer

mamy nadzieję, że nasz Swift Android Toolchain pomoże Ci w ułatwieniu i bezproblemowym procesie rozwoju. Język Swift ewoluował znacznie w ciągu ostatnich kilku lat, a programiści, którzy już kodują dla platform iOS i Mac za pomocą Swift, mogą teraz łatwo mieć Androida na swoim radarze.

Sources

  1. pierwsze kroki z Swift na Androida https://github.com/apple/swift/blob/master/docs/Android.md
  2. Architektura aplikacji 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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.