Swift-projektet introducerar nya nedladdningsbara Swift-verktygskedjeavbildningar för Windows! Dessa avbildningar innehåller utvecklingskomponenter som behövs för att bygga och köra Swift-kod på Windows.
I över ett år nu har det funnits en betydande strävan att portera Swift till Windows i samarbete med utvecklargemenskapen på swift.org. Stödet för Windows har nu nått en punkt där tidiga användare kan börja använda Swift för att bygga riktiga upplevelser på den här plattformen.
Att föra Swift till Windows
Att föra Swift till Windows handlar inte bara om att portera kompilatorn, utan snarare om att se till att hela ekosystemet är tillgängligt på plattformen. Detta inkluderar kompilatorn, standardbiblioteket och kärnbiblioteken (dispatch, Foundation, XCTest). Dessa bibliotek är en del av det som gör det möjligt för utvecklare att enkelt skriva kraftfulla program utan att behöva oroa sig för många av detaljerna i det underliggande systemet. Det finns många tekniska detaljer i berättelsen om att föra Swift till ett användbart tillstånd på Windows, och om du är intresserad av dem rekommenderar jag att du läser mitt föredrag om ämnet från LLVM Developer Conference.
Med dessa kärnbibliotek och den flexibla driftskompatibiliteten mellan Swift och C är det möjligt att utveckla tillämpningar på Windows enbart i Swift och samtidigt dra nytta av den befintliga korpusen av bibliotek på Windows-plattformarna.
Exempelprogram
Denna demokalkylator är skriven helt och hållet i Swift, och koden växlar sömlöst mellan programkoden skriven i Swift och systembiblioteken:
Detta projekt byggdes med hjälp av:
-
Swift-verktygskedjan på Windows
-
En installation av Visual Studio 2019 som levererar de andra nödvändiga delarna i form av CMake, Ninja och Windows SDK
Och även om demotillämpningen är byggd med CMake, så är stödet för Swift Package Manager på Windows på gång. Det kommer snart att vara möjligt att få applikationen byggd med swift build
utan att behöva CMake eller Ninja.
Här kan du se hur du går igenom applikationen med hjälp av lldb
:
Tvärplattformstillämpningar
Förstagångsanvändare som Readdle experimenterar med plattformsoberoende tillämpningar som är skrivna i Swift, vilket gör det enkelt att ta med sig många av de existerande Swift-biblioteken till Windows för att stödja deras applikationer.
Jag hade samarbetat med Alexander på Readdle om hans teams arbete, och han skickade mig den här notisen:
Vi på Readdle började experimentera med Swift på Windows för mer än ett år sedan, i andra kvartalet 2019. Vid den tidpunkten hade vi redan släppt Spark för Android som använder Swift för att dela kärnkod med iOS/macOS, och möjligheten att utöka till ytterligare en plattform var verkligen lockande.
Trots att viss funktionalitet ännu inte är redo visade sig Swift på Windows uppfylla våra behov fullt ut. Faktum är att vissa C/C++-beroenden från tredje part gav oss mer huvudvärk än vad Swift själv gjorde. All affärslogik i Spark finns i en separat Core-modul. Egentligen ett paket av moduler, men vi hänvisar till dem som Core. Detta gör det möjligt för oss att använda vilket UI-ramverk som helst på målplattformen: AppKit på macOS, UIKit på iOS, native UI Toolkit på Android. Så i princip var vi tvungna att anpassa Spark Core till Windows. Efter att alla inledande koncept hade bevisats var det mestadels rutinmässigt dagligt arbete för att ge liv åt det på Windows.
Vad vi har nu:
- 9 Swift-moduler (255 739 SLOC, 2 133 källfiler)
- 3 Swift-moduler från tredje part
- 1452 tester (drivs av XCTest)
- Windows-baserad CI för att hålla alla tester gröna
- Heterogent byggsystem (delvis CMake, delvis anpassade skript)
Som ett bra exempel fungerade rena Swift-moduler som CryptoSwift och OAuthSwift nästan direkt ur lådan. Vi gjorde triviala importjusteringar, exkluderade några AppKit/UIKit-referenser och voilà!
En annan utmaning var att bestämma hur användargränssnittet skulle implementeras. Efter omfattande diskussioner slutade vi med Electron som front-end del av framtida Spark för Windows. Det innebar att vi inte bara behövde kunna bygga Spark Core på Windows utan också använda det som ett laddningsbart tillägg för Node.js.
Node.jstillägg i ren Swift? Det visade sig vara förvånansvärt enkelt. Swift importerar perfekt N-API-huvuden. Vi behöver fortfarande tre rader C-kod plus en liten C-header för att definiera ingångspunkten för addon, men all logik finns i Swift. På grund av den plattformsöverskridande karaktären hos Node.js kunde vi använda macOS som utvecklingsplattform med Xcode som IDE och sedan använda CMake för att bygga samma kod på Windows.
Sedan den första dagen vi började har Swift på Windows tagit ett stort steg framåt när det gäller plattformsstöd och stabilitet. Jag skulle säga, om du funderar på att utöka din befintliga applikationskodbas till andra plattformar än macOS/iOS – du kan absolut göra det med Swift nu, eller åtminstone snart. Om du underhåller ett litet Swift-bibliotek – kan du lätt lägga till stöd för Windows redan nu!
– Alexander Smarus; Product Engineering Lead at Spark Team, Readdle Inc
Mer information finns på Readdles blogg.
Att lägga till stöd för Windows i Swift är början på en resa. Det nuvarande stödet sätter den första milstolpen där språket är användbart. Det finns ännu en annan ännu bredare del av ekosystemet som lldb och Swift Package Manager som fortfarande behöver mer arbete för att vara lika kompletta i sitt stöd för denna annorlunda plattform.
Kom igång och engagera dig!
Avsnittet Kom igång har uppdaterats med ny information om hur man använder Swift på Windows! För de tidiga användarna som börjar komma igång och hittar problem, rapportera dem till Swift Bug Tracker.
Det finns många möjligheter för dem som är intresserade av att hjälpa till att driva Swift på Windows framåt. En av de saker som gör Swift lätt att använda är bibliotek: att publicera nya bibliotek och paket för Swift på Windows eller portera befintliga är ett annat sätt att engagera sig och hjälpa till att göra det ännu roligare att arbeta med Swift.
För de som är intresserade av att arbeta med kärnverktygen finns det gott om arbete att göra för att förbättra felsökaren och för att förbättra Windows-stödet i Swift Package Manager. Vi uppmanar dig att kolla in Swift Bug Tracker för de aktuella problemen och att skicka patchar till GitHub-förråden. Det finns också en ny sektion på Swift-forumet för att diskutera utvecklingen av Swift på Windows. Där kan gemenskapen diskutera problem eller så kan du presentera dig själv och låta andra veta vilket område av verktygen du fokuserar på. Detta är det perfekta tillfället att engagera sig i projektet och hjälpa det att växa till ett starkt, levande, plattformsoberoende ekosystem. Vi kan inte vänta på att se vilka spännande saker du bygger med Swift!