Swift项目正在推出新的可下载的Windows版Swift工具链镜像!这些镜像包含了在Windows上构建和运行Swift代码所需的开发组件。 这些镜像包含在 Windows 上构建和运行 Swift 代码所需的开发组件。
一年多来,我们一直在努力与swift.org的开发者社区合作,将Swift移植到Windows。 现在对 Windows 的支持已经达到了一定程度,早期采用者可以开始使用 Swift 在这个平台上构建真正的体验。
将 Swift 移植到 Windows
将 Swift 移植到 Windows 并不是简单地移植编译器,而是要确保整个生态系统在该平台上可用。 这包括编译器、标准库和核心库(dispatch、Foundation、XCTest)。 这些库是使开发人员能够轻松地编写强大的应用程序的部分原因,而不必担心底层系统的许多细节问题。 在把Swift带到Windows上的可用状态的故事中,有许多技术细节,如果你对这些细节感兴趣,我建议你看看我在LLVM开发者大会上关于这个主题的演讲。
有了这些核心库和Swift与C语言的灵活互操作性,就有可能纯粹用Swift在Windows上开发应用程序,同时利用Windows平台上现有的库群。
应用实例
这个演示的计算器完全是用Swift编写的,代码在用Swift编写的应用程序代码和系统库之间无缝切换:

这个项目是用以下方法构建的:
-
Windows上的Swift工具链
-
安装Visual Studio 2019,它以CMake、Ninja和Windows SDK的形式提供了其他所需的部分。
尽管该演示程序是用CMake构建的,但Windows上的Swift包管理器支持即将到来。 很快就可以使用swift build ,而不需要CMake或Ninja来构建应用程序。
在这里你可以看到使用lldb 逐步完成应用程序:

跨平台应用程序
像Readdle这样的早期采用者正在尝试用Swift编写的跨平台应用程序,轻松地将许多现有的Swift库带到Windows,以支持其应用程序。
我曾与Readdle的Alexander讨论过他团队的工作,他给我发来了这个说明:
我们Readdle在一年多前,也就是2019年第二季度开始在Windows上试验Swift。那时我们已经发布了Spark for Android,它使用Swift与iOS/MacOS共享核心代码,而扩展到另一个平台的机会确实很诱人。
尽管有些功能还没有准备好,但Windows上的Swift原来完全满足了我们的需求。事实上,一些第三方的C/C++依赖性比Swift本身更让我们头疼。Spark的所有业务逻辑都位于一个单独的Core模块中。实际上是一揽子模块,但我们把它们称为Core。这使得我们可以在目标平台上使用任何UI框架。macOS上的AppKit,iOS上的UIKit,Android上的本地UI工具包。所以,基本上,我们必须在Windows上移植Spark Core。在所有最初的概念被证明后,主要是日常工作,以使其在Windows上保持活力。
我们现在有什么?
- 9个Swift模块 (255 739 SLOC, 2 133 source files)
- 3个第三方Swift模块
- 1452个测试(由XCTest驱动)
- 基于Windows的CI,使所有测试保持绿色
- 异质构建系统(部分是CMake,部分是自定义脚本)
作为一个很好的例子,像CryptoSwift和OAuthSwift这样的纯Swift模块几乎开箱即用。我们做了微不足道的导入调整,排除了一些AppKit/UIKit的引用,然后就可以了。
另一个挑战是要决定如何实现用户界面。经过广泛的讨论,我们最终将Electron作为未来Windows版Spark的前端部分。这意味着我们不仅需要能够在Windows上构建Spark Core,还需要将其作为Node.js的可加载插件。
纯粹的Swift中的Node.js插件?这似乎是出乎意料的简单。Swift完美地导入了N-API头文件。我们仍然需要三行C语言代码加上一个小的C语言头来定义addon的入口点,但是所有的逻辑都在Swift中。由于Node.js的跨平台特性,我们能够使用macOS作为开发平台,使用Xcode作为IDE,然后使用CMake的敏捷性在Windows上构建同样的代码。
从我们开始工作的第一天起,Windows上的Swift就在平台支持和稳定性方面迈出了一大步。我想说的是,如果你正在考虑将你现有的应用程序代码库扩展到macOS/iOS以外的平台--你现在绝对可以用Swift来做,或者,至少,很快。如果你正在维护一个小型的Swift库--你已经可以很容易地增加对Windows的支持了。
- Alexander Smarus; Readdle公司Spark团队的产品工程负责人
更多细节可在Readdle的博客上找到。
在Swift中添加对Windows的支持是一个旅程的开始。 目前的支持设定了第一个里程碑,即该语言可以使用。 还有另一个更广泛的生态系统的一部分,如ldb和Swift包管理器,仍然需要更多的工作来完成对这个不同平台的支持。
入门和参与!
入门"部分已经更新了关于在 Windows 上使用 Swift 的新信息! 对于那些正在起步并发现问题的早期采用者,请将它们报告给Swift Bug Tracker。
对于那些有兴趣帮助推动 Windows 上的 Swift 发展的人来说,有很多机会。 使得Swift易于使用的东西之一是库:为Windows上的Swift发布新的库和包或移植现有的库和包是另一种参与方式,有助于使使用Swift的工作变得更加愉快。
对于那些对核心工具感兴趣的人来说,还有很多工作要做,以改进调试器和改进Swift包管理器中的Windows支持。 我们邀请你查看Swift Bug Tracker,了解当前的问题,并向GitHub仓库发送补丁。 在Swift论坛上也有一个新的版块来讨论Swift在Windows上的发展。 在那里,社区可以讨论问题,或者你可以介绍自己,让别人知道你专注于哪个领域的工具。 这是参与该项目并帮助其成长为一个强大的、充满活力的、跨平台的生态系统的完美机会。 我们迫不及待地想看到你用Swift构建的激动人心的东西!