Swift-projektet introducerer nye Swift-værktøjskædeimages til Windows, der kan downloades! Disse images indeholder udviklingskomponenter, der er nødvendige for at bygge og køre Swift-kode på Windows.
I over et år har der nu været en betydelig bestræbelse på at portere Swift til Windows i samarbejde med udviklerfællesskabet på swift.org. Windows-understøttelsen er nu nået et punkt, hvor de tidlige brugere kan begynde at bruge Swift til at bygge rigtige oplevelser på denne platform.
Bringe Swift til Windows
Portering af Swift til Windows handler ikke blot om at portere compileren, men snarere om at sikre, at hele økosystemet er tilgængeligt på platformen. Dette omfatter compileren, standardbiblioteket og kernebibliotekerne (dispatch, Foundation, XCTest). Disse biblioteker er en del af det, der gør det muligt for udviklere at skrive kraftfulde applikationer med lethed og uden at skulle bekymre sig om mange af detaljerne i det underliggende system. Der er mange tekniske detaljer i historien om at bringe Swift til en brugbar tilstand på Windows, og hvis du er interesseret i dem, vil jeg anbefale at læse mit foredrag om emnet fra LLVM Developer Conference.
Med disse kernebiblioteker og den fleksible interoperabilitet mellem Swift og C er det muligt at udvikle applikationer på Windows udelukkende i Swift og samtidig drage fordel af det eksisterende korpus af biblioteker på Windows-platformene.
Eksempelprogram
Denne demo-regnemaskine er skrevet udelukkende i Swift, og koden veksler problemfrit mellem applikationskoden skrevet i Swift og systembibliotekerne:
Dette projekt blev bygget vha:
-
Swift-værktøjskæden på Windows
-
En installation af Visual Studio 2019, som leverer de andre nødvendige dele i form af CMake, Ninja og Windows SDK
Og selv om demoprogrammet er bygget med CMake, er understøttelse af Swift Package Manager på Windows på vej. Det vil snart være muligt at få programmet bygget ved hjælp af swift build
uden at have brug for CMake eller Ninja.
Her kan du se, hvordan du gennemgår programmet ved hjælp af lldb
:
Tværplatformsapplikationer
Tidligt udviklede virksomheder som Readdle eksperimenterer med tværplatformsapplikationer skrevet i Swift og bringer nemt mange af de eksisterende Swift-biblioteker til Windows for at understøtte deres applikationer.
Jeg havde arbejdet sammen med Alexander hos Readdle om hans teams arbejde, og han sendte mig denne note:
Vi hos Readdle begyndte at eksperimentere med Swift på Windows for mere end et år siden, i 2. kvartal af 2019. På det tidspunkt havde vi allerede udgivet Spark for Android, som bruger Swift til at dele kernekode med iOS/macOS, og muligheden for at udvide til endnu en platform var virkelig fristende.
Men på trods af at nogle funktioner endnu ikke er klar, viste det sig, at Swift på Windows fuldt ud opfyldte vores behov. Faktisk gav nogle C/C++-afhængigheder fra tredjeparter os mere hovedpine, end Swift selv gjorde. Al forretningslogikken i Spark er placeret i et separat Core-modul. En pakke af moduler, faktisk, men vi henviser til dem som Core. Dette giver os mulighed for at bruge enhver UI-ramme på målplatformen: AppKit på macOS, UIKit på iOS, native UI Toolkit på Android. Så i bund og grund var vi nødt til at portere Spark Core på Windows. Efter at alle indledende koncepter var blevet bevist, var det mest rutinemæssigt dag-til-dag-arbejde for at bringe det til live på Windows.
Hvad vi har nu:
- 9 Swift-moduler (255 739 SLOC, 2 133 kildefiler)
- 3 tredjeparts Swift-moduler
- 1452 tests (drevet af XCTest)
- Windows-baseret CI for at holde alle tests grønne
- Heterogent build-system (delvist CMake, delvist brugerdefinerede scripts)
Som et godt eksempel fungerede rene Swift-moduler som CryptoSwift og OAuthSwift næsten lige ud af boksen. Vi foretog trivielle importjusteringer, udelukkede et par AppKit/UIKit-referencer, og voilà!
En anden udfordring var at beslutte, hvordan brugergrænsefladen skulle implementeres. Efter en omfattende diskurs endte vi med Electron som front-end-delen af den fremtidige Spark til Windows. Det betød, at vi ikke kun skulle kunne bygge Spark Core på Windows, men også bruge det som en addon, der kan indlæses til Node.js.
Node.js addon i ren Swift? Det viste sig at være overraskende nemt. Swift importerer perfekt N-API-headers. Vi har stadig brug for tre linjer C-kode plus en lille C-header til at definere addon-indgangspunktet, men al logik er i Swift. På grund af Node.js’ tværplatformsnatur var vi i stand til at bruge macOS som udviklingsplatform med Xcode som IDE og derefter bruge smidigheden i CMake til at bygge den samme kode på Windows.
Siden den første dag, vi startede, har Swift på Windows gjort et kæmpe skridt fremad med hensyn til platformsunderstøttelse og stabilitet. Jeg vil sige, at hvis du overvejer at udvide din eksisterende programkodebase til andre platforme end macOS/iOS – så kan du absolut gøre det med Swift nu, eller i det mindste snart. Hvis du vedligeholder et lille Swift-bibliotek – kan du sagtens tilføje Windows-understøttelse allerede!
– Alexander Smarus; Product Engineering Lead at Spark Team, Readdle Inc
Der findes flere oplysninger på Readdles blog.
At tilføje understøttelse af Windows til Swift er begyndelsen på en rejse. Den nuværende understøttelse sætter den første milepæl, hvor sproget er brugbart. Der er endnu en endnu bredere del af økosystemet som lldb og Swift Package Manager, som stadig har brug for mere arbejde for at være lige så komplet i deres understøttelse af denne anderledes platform.
Gå i gang og bliv involveret!
Afsnittet Kom godt i gang er blevet opdateret med nye oplysninger om brug af Swift på Windows! Til de tidlige brugere, der er kommet i gang og finder problemer, bedes du rapportere dem til Swift Bug Tracker.
Der er mange muligheder for dem, der er interesserede i at hjælpe med at skubbe Swift på Windows fremad. En af de ting, der gør Swift let at bruge, er biblioteker: Udgivelse af nye biblioteker og pakker til Swift på Windows eller portering af eksisterende er en anden måde at blive involveret og hjælpe med at gøre det til en stadig større fornøjelse at arbejde med Swift.
For dem, der er interesserede i at arbejde på kerneværktøjet, er der masser af arbejde at gøre for at forbedre debuggeren og forbedre Windows-understøttelsen i Swift Package Manager. Vi opfordrer dig til at tjekke Swift Bug Tracker for de aktuelle problemer og til at sende patches til GitHub-repositorierne. Der er også en ny sektion på Swift-forummet til at diskutere udviklingen af Swift på Windows. Der kan fællesskabet diskutere problemer, eller du kan præsentere dig selv og lade andre vide, hvilket område af værktøjet du fokuserer på. Dette er den perfekte mulighed for at blive involveret i projektet og hjælpe det med at vokse til et stærkt, levende økosystem på tværs af platforme. Vi kan ikke vente med at se, hvilke spændende ting du bygger med Swift!