Het Swift project introduceert nieuwe downloadbare Swift toolchain images voor Windows! Deze images bevatten ontwikkelcomponenten die nodig zijn om Swift code te bouwen en te draaien op Windows.
Al meer dan een jaar wordt er hard gewerkt om Swift te porten naar Windows in samenwerking met de ontwikkelaarsgemeenschap op swift.org. De Windows-ondersteuning is nu op een punt waar early adopters kunnen beginnen met het gebruik van Swift om echte ervaringen te bouwen op dit platform.
Bringing Swift to Windows
Porting van Swift naar Windows gaat niet alleen over het porten van de compiler, maar zorgt ervoor dat het volledige ecosysteem beschikbaar is op het platform. Dit omvat de compiler, de standaard bibliotheek, en de kernbibliotheken (dispatch, Foundation, XCTest). Deze bibliotheken zijn een deel van wat ontwikkelaars in staat stelt om krachtige toepassingen te schrijven met gemak en zonder zich zorgen te hoeven maken over veel van de details van het onderliggende systeem. Er zijn veel technische details in het verhaal over het bruikbaar maken van Swift op Windows, en als je daarin geïnteresseerd bent, raad ik je aan mijn toespraak over het onderwerp van de LLVM Developer Conference te bekijken.
Met deze kernbibliotheken en de flexibele interoperabiliteit van Swift met C, is het mogelijk om applicaties op Windows puur in Swift te ontwikkelen en tegelijkertijd gebruik te maken van het bestaande corpus van bibliotheken op de Windows-platforms.
Example Application
Deze demo-rekenmachine is volledig in Swift geschreven, waarbij de code naadloos overgaat tussen de applicatiecode die in Swift is geschreven en de systeembibliotheken:
Dit project is gebouwd met behulp van:
-
De Swift toolchain op Windows
-
Een installatie van Visual Studio 2019 die de andere benodigde stukken levert in de vorm van CMake, Ninja, en de Windows SDK
Hoewel de demo-applicatie is gebouwd met CMake, Swift Package Manager-ondersteuning op Windows komt eraan. Het zal binnenkort mogelijk zijn om de applicatie te bouwen met swift build
zonder CMake of Ninja nodig te hebben.
Hier kunt u zien hoe u door de applicatie stapt met lldb
:
Cross-Platform Applications
Early adopters zoals Readdle experimenteren met cross-platform applicaties geschreven in Swift, waarbij ze eenvoudig veel van de bestaande Swift bibliotheken naar Windows brengen om hun applicaties te ondersteunen.
Ik had met Alexander bij Readdle gewerkt over het werk van zijn team, en hij stuurde me deze notitie:
We bij Readdle begonnen meer dan een jaar geleden te experimenteren met Swift op Windows, in Q2 van 2019. Tegen die tijd hadden we al Spark voor Android uitgebracht, dat Swift gebruikt om kerncode te delen met iOS/macOS, en de kans om uit te breiden naar nog een platform was echt verleidelijk.
Ondanks dat sommige functionaliteit nog niet klaar was, bleek Swift op Windows volledig aan onze behoeften te voldoen. Sterker nog, sommige afhankelijkheden van derden in C/C++ gaven ons meer hoofdpijn dan Swift zelf. Alle zakelijke logica van Spark is ondergebracht in een aparte Core module. Een pakket van modules, eigenlijk, maar we verwijzen ernaar als Core. Dit stelt ons in staat om elk UI framework op het doelplatform te gebruiken: AppKit op macOS, UIKit op iOS, native UI Toolkit op Android. Dus, in principe, moesten we Spark Core overzetten op Windows. Nadat alle eerste concepten waren bewezen, was het vooral routine-werk om het tot leven te brengen op Windows.
Wat we nu hebben:
- 9 Swift modules (255 739 SLOC, 2 133 bronbestanden)
- 3 swift modules van derden
- 1452 tests (aangedreven door XCTest)
- Windows-gebaseerde CI om alle tests groen te houden
- Heterogeen build systeem (deels CMake, gedeeltelijk aangepaste scripts)
Als een goed voorbeeld, pure Swift modules zoals CryptoSwift en OAuthSwift werkten bijna direct uit de doos. We hebben een triviale import aanpassing gedaan, een paar AppKit/UIKit referenties uitgesloten en voilà!
Een andere uitdaging was om te beslissen hoe we de gebruikersinterface zouden implementeren. Na uitvoerig overleg kwamen we uit bij Electron als front-end onderdeel van het toekomstige Spark voor Windows. Dat betekende dat we niet alleen Spark Core op Windows moesten kunnen bouwen, maar het ook moesten kunnen gebruiken als een laadbare addon voor Node.js.
Node.js addon in pure Swift? Dat bleek verrassend eenvoudig te zijn. Swift importeert perfect N-API headers. We hebben nog steeds drie regels C code nodig plus een kleine C header om het addon entry point te definiëren, maar alle logica is in Swift. Vanwege de cross-platform aard van Node.js, waren we in staat om macOS te gebruiken als ontwikkelplatform met Xcode als IDE, en vervolgens de behendigheid van CMake te gebruiken om dezelfde code op Windows te bouwen.
Sinds de eerste dag dat we begonnen, heeft Swift op Windows een enorme stap voorwaarts gezet in termen van platformondersteuning en stabiliteit. Ik zou zeggen, als je erover denkt om je bestaande applicatie codebase uit te breiden naar andere platforms dan macOS/iOS – dan kun je dat nu absoluut doen met Swift, of in ieder geval binnenkort. Als je een kleine Swift-bibliotheek onderhoudt – zou je gemakkelijk Windows-ondersteuning al kunnen toevoegen!
– Alexander Smarus; Product Engineering Lead at Spark Team, Readdle Inc
Meer details zijn beschikbaar op Readdle’s blog.
Het toevoegen van ondersteuning voor Windows aan Swift is het begin van een reis. De huidige ondersteuning zet de eerste mijlpaal waar de taal bruikbaar is. Er is nog een ander, nog breder deel van het ecosysteem zoals lldb en de Swift Package Manager die nog meer werk nodig hebben om net zo compleet te zijn in hun ondersteuning voor dit andere platform.
Getting Started and Getting Involved!
De sectie Getting Started is bijgewerkt met nieuwe informatie over het gebruik van Swift op Windows! Voor de early adopters die aan de slag gaan en problemen tegenkomen, meld ze alstublieft in de Swift Bug Tracker.
Er zijn veel mogelijkheden voor diegenen die Swift op Windows vooruit willen helpen. Een van de dingen die Swift gebruiksvriendelijk maken zijn bibliotheken: het publiceren van nieuwe bibliotheken en pakketten voor Swift op Windows of het porten van bestaande is een andere manier om betrokken te raken en te helpen om het werken met Swift een steeds groter plezier te maken.
Voor degenen die geïnteresseerd zijn in het werken aan core tooling, is er genoeg werk te doen om de debugger te verbeteren en om de Windows-ondersteuning in de Swift Package Manager te verbeteren. We nodigen je uit om de Swift Bug Tracker te bekijken voor de huidige problemen en om patches te sturen naar de GitHub repositories. Er is ook een nieuwe sectie op de Swift forums om de ontwikkeling van Swift op Windows te bespreken. Daar kan de gemeenschap problemen bespreken of u kunt uzelf voorstellen en anderen laten weten op welk gebied van de tooling u zich richt. Dit is de perfecte gelegenheid om betrokken te raken bij het project en het te helpen uitgroeien tot een sterk, levendig, platformonafhankelijk ecosysteem. We kunnen niet wachten om te zien welke opwindende dingen je bouwt met Swift!