Das Swift-Projekt stellt neue herunterladbare Swift-Toolchain-Images für Windows vor! Diese Images enthalten Entwicklungskomponenten, die benötigt werden, um Swift-Code auf Windows zu erstellen und auszuführen.
Seit über einem Jahr wird in Zusammenarbeit mit der Entwicklergemeinschaft auf swift.org intensiv an der Portierung von Swift auf Windows gearbeitet. Die Windows-Unterstützung ist nun an einem Punkt angelangt, an dem Early Adopters damit beginnen können, Swift zu nutzen, um echte Erfahrungen auf dieser Plattform zu entwickeln.
Bringing Swift to Windows
Bei der Portierung von Swift auf Windows geht es nicht nur darum, den Compiler zu portieren, sondern sicherzustellen, dass das gesamte Ökosystem auf dieser Plattform verfügbar ist. Dazu gehören der Compiler, die Standardbibliothek und die Kernbibliotheken (Dispatch, Foundation, XCTest). Diese Bibliotheken sind ein Teil dessen, was es Entwicklern ermöglicht, mit Leichtigkeit leistungsstarke Anwendungen zu schreiben, ohne sich um viele Details des zugrunde liegenden Systems kümmern zu müssen. Es gibt viele technische Details in der Geschichte, Swift auf Windows nutzbar zu machen, und wenn Sie daran interessiert sind, empfehle ich Ihnen meinen Vortrag zu diesem Thema von der LLVM-Entwicklerkonferenz.
Mit diesen Kernbibliotheken und der flexiblen Interoperabilität von Swift mit C ist es möglich, Anwendungen auf Windows rein in Swift zu entwickeln und dabei die Vorteile des bestehenden Korpus von Bibliotheken auf den Windows-Plattformen zu nutzen.
Beispielanwendung
Dieser Demo-Rechner ist vollständig in Swift geschrieben, wobei der Code nahtlos zwischen dem in Swift geschriebenen Anwendungscode und den Systembibliotheken wechselt:
Dieses Projekt wurde mit:
-
Die Swift-Toolchain unter Windows
-
Eine Installation von Visual Studio 2019, die die anderen benötigten Teile in Form von CMake, Ninja und dem Windows-SDK bereitstellt
Obwohl die Demo-Anwendung mit CMake erstellt wurde, ist die Unterstützung des Swift Package Managers unter Windows in Arbeit. Es wird bald möglich sein, die Anwendung mit swift build
zu erstellen, ohne CMake oder Ninja zu benötigen.
Hier können Sie sehen, wie Sie mit lldb
durch die Anwendung gehen:
Plattformübergreifende Anwendungen
Frühanwender wie Readdle experimentieren mit plattformübergreifenden Anwendungen, die in Swift geschrieben wurden, und bringen viele der vorhandenen Swift-Bibliotheken einfach nach Windows, um ihre Anwendungen zu unterstützen.
Ich habe mit Alexander bei Readdle über die Arbeit seines Teams gesprochen, und er hat mir diese Notiz geschickt:
Wir bei Readdle haben vor mehr als einem Jahr, im zweiten Quartal 2019, begonnen, mit Swift auf Windows zu experimentieren. Zu diesem Zeitpunkt hatten wir bereits Spark für Android veröffentlicht, das Swift verwendet, um den Kerncode mit iOS/macOS zu teilen, und die Möglichkeit, auf eine weitere Plattform zu erweitern, war wirklich verlockend.
Trotz einiger Funktionen, die noch nicht bereit sind, hat sich herausgestellt, dass Swift auf Windows unsere Bedürfnisse voll erfüllt. Tatsächlich bereiteten uns einige C/C++-Abhängigkeiten von Drittanbietern mehr Kopfzerbrechen als Swift selbst. Die gesamte Geschäftslogik von Spark befindet sich in einem separaten Core-Modul. Eigentlich ist es ein ganzes Paket von Modulen, aber wir bezeichnen sie als Core. Dadurch können wir jedes UI-Framework auf der Zielplattform verwenden: AppKit auf macOS, UIKit auf iOS, natives UI Toolkit auf Android. Im Grunde mussten wir also Spark Core auf Windows portieren. Nachdem alle anfänglichen Konzepte erprobt waren, war es hauptsächlich tägliche Routinearbeit, um es unter Windows zum Leben zu erwecken.
Was wir jetzt haben:
- 9 Swift-Module (255 739 SLOC, 2 133 Quelldateien)
- 3 Swift-Module von Drittanbietern
- 1452 Tests (powered by XCTest)
- Windows-basierte CI, um alle Tests im grünen Bereich zu halten
- Heterogenes Build-System (teilweise CMake, teilweise benutzerdefinierte Skripte)
Als gutes Beispiel funktionierten reine Swift-Module wie CryptoSwift und OAuthSwift fast von Anfang an. Wir haben triviale Importanpassungen vorgenommen, ein paar AppKit/UIKit-Referenzen ausgeschlossen und voilà!
Eine weitere Herausforderung war die Entscheidung, wie die Benutzeroberfläche implementiert werden sollte. Nach ausgiebigem Diskurs entschieden wir uns für Electron als Front-End-Teil des zukünftigen Spark für Windows. Das bedeutete, dass wir nicht nur in der Lage sein mussten, Spark Core auf Windows zu bauen, sondern es auch als ladbares Addon für Node.js zu verwenden.
Node.js-Addon in reinem Swift? Das schien erstaunlich einfach zu sein. Swift importiert die N-API-Header perfekt. Wir brauchen noch drei Zeilen C-Code und einen kleinen C-Header, um den Einstiegspunkt des Addons zu definieren, aber die gesamte Logik ist in Swift. Aufgrund der plattformübergreifenden Natur von Node.js konnten wir macOS als Entwicklungsplattform mit Xcode als IDE verwenden und dann die Flexibilität von CMake nutzen, um denselben Code unter Windows zu erstellen.
Seit dem ersten Tag, an dem wir angefangen haben, hat Swift unter Windows einen riesigen Schritt nach vorne gemacht, was die Plattformunterstützung und Stabilität angeht. Ich würde sagen, wenn Sie darüber nachdenken, Ihre bestehende Anwendungscodebasis auf andere Plattformen als macOS/iOS zu erweitern – Sie können es auf jeden Fall mit Swift jetzt tun, oder zumindest bald. Wenn Sie eine kleine Swift-Bibliothek pflegen, können Sie die Windows-Unterstützung bereits jetzt leicht hinzufügen!
– Alexander Smarus; Product Engineering Lead at Spark Team, Readdle Inc
Mehr Details finden Sie auf dem Blog von Readdle.
Die Unterstützung von Windows in Swift ist der Beginn einer Reise. Die aktuelle Unterstützung setzt den ersten Meilenstein, an dem die Sprache nutzbar ist. Es gibt noch weitere Teile des Ökosystems wie lldb und den Swift Package Manager, die noch mehr Arbeit benötigen, um diese andere Plattform ebenso vollständig zu unterstützen.
Einstieg und Beteiligung!
Der Abschnitt „Einstieg“ wurde mit neuen Informationen über die Verwendung von Swift unter Windows aktualisiert! Diejenigen, die gerade erst anfangen und auf Probleme stoßen, sollten diese bitte im Swift Bug Tracker melden.
Es gibt viele Möglichkeiten für diejenigen, die daran interessiert sind, Swift auf Windows voranzubringen. Die Veröffentlichung neuer Bibliotheken und Pakete für Swift auf Windows oder die Portierung bestehender Bibliotheken ist eine weitere Möglichkeit, sich zu engagieren und die Arbeit mit Swift zu einem immer größeren Vergnügen zu machen.
Für diejenigen, die an der Arbeit an den Kernwerkzeugen interessiert sind, gibt es viel zu tun, um den Debugger und die Windows-Unterstützung im Swift Package Manager zu verbessern. Wir laden Sie ein, im Swift Bug Tracker nach aktuellen Problemen zu suchen und Patches an die GitHub Repositories zu senden. Es gibt auch einen neuen Bereich in den Swift-Foren, um die Entwicklung von Swift auf Windows zu diskutieren. Dort kann die Community Probleme diskutieren oder Sie können sich selbst vorstellen und andere wissen lassen, auf welchen Bereich des Toolings Sie sich konzentrieren. Dies ist die perfekte Gelegenheit, sich in das Projekt einzubringen und ihm dabei zu helfen, sich zu einem starken, lebendigen, plattformübergreifenden Ökosystem zu entwickeln. Wir können es kaum erwarten, zu sehen, was für aufregende Dinge Sie mit Swift bauen!