介绍 Windows 上的 Swift
Swift 项目正在为 Windows 推出全新的可下载 Swift 工具链镜像! 这些镜像包含在 Windows 上构建和运行 Swift 代码所需的开发组件。
一年多以来,为了将 Swift 移植到 Windows,swift.org 的开发者社区付出了巨大的努力。 现在 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 构建的,但 Swift Package Manager 在 Windows 上的支持正在逐步完善。 很快就可以使用 swift build
构建应用程序,而无需 CMake 或 Ninja。
在这里您可以看到使用 lldb
单步调试应用程序
跨平台应用
像 Readdle 这样的早期采用者正在尝试用 Swift 编写跨平台应用程序,轻松地将许多现有的 Swift 库引入 Windows 以支持他们的应用程序。
我一直在与 Readdle 的 Alexander 讨论他们团队的工作,他给我发了这条消息
我们在 Readdle 早在一年前,也就是 2019 年第二季度就开始尝试在 Windows 上使用 Swift。 那时我们已经发布了 Android 版 Spark,它使用 Swift 与 iOS/macOS 共享核心代码,而扩展到一个更多平台的机会真的很有诱惑力。
尽管某些功能尚未准备就绪,但事实证明 Windows 上的 Swift 完全满足了我们的需求。 事实上,一些第三方 C/C++ 依赖项给我们带来的麻烦比 Swift 本身还要多。 Spark 的所有业务逻辑都位于一个单独的 Core 模块中。 实际上是一组模块,但我们将其称为 Core。 这使我们可以在目标平台上使用任何 UI 框架:macOS 上的 AppKit、iOS 上的 UIKit、Android 上的原生 UI 工具包。 因此,基本上,我们必须将 Spark Core 移植到 Windows。 在所有初始概念得到验证后,将其在 Windows 上实现主要就是日常的例行工作。
我们现在拥有的
- 9 个 Swift 模块(255 739 SLOC,2 133 个源文件)
- 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 标头来定义插件入口点,但所有逻辑都在 Swift 中。 由于 Node.js 的跨平台特性,我们能够使用 macOS 作为开发平台,以 Xcode 作为 IDE,然后利用 CMake 的灵活性在 Windows 上构建相同的代码。
自从我们开始的第一天起,Windows 上的 Swift 在平台支持和稳定性方面向前迈进了一大步。 我想说,如果您正在考虑将现有的应用程序代码库扩展到 macOS/iOS 以外的平台 - 您现在绝对可以使用 Swift 来做到这一点,或者至少很快就可以做到。 如果您正在维护一个小型 Swift 库 - 您可以轻松地添加 Windows 支持!
— Alexander Smarus;Readdle Inc Spark 团队产品工程主管
更多详情请访问 Readdle 的博客。
为 Swift 添加 Windows 支持仅仅是一个旅程的开始。 目前的支持设定了第一个里程碑,即该语言是可用的。 生态系统中还有更广泛的部分,例如 lldb 和 Swift Package Manager,它们仍然需要更多工作才能在其对这个不同平台的支援方面更加完整。
开始使用和参与进来!
“开始使用”部分已更新了关于在 Windows 上使用 Swift 的新信息! 对于开始使用并发现问题的早期采用者,请将问题报告给 Swift Bug Tracker。
对于那些有兴趣帮助推动 Windows 上 Swift 发展的人来说,有很多机会。 使 Swift 易于使用的一件事是库:为 Windows 上的 Swift 发布新的库和包,或者移植现有的库和包,是另一种参与进来并帮助使 Swift 更加令人愉悦的方式。
对于那些有兴趣从事核心工具开发的人来说,还有很多工作要做,以改进调试器并改进 Swift Package Manager 对 Windows 的支持。 我们邀请您查看 Swift Bug Tracker 以了解当前的问题,并将补丁发送到 GitHub 存储库。 Swift 论坛上还有一个新版块,用于讨论 Windows 上 Swift 的开发。 在那里,社区可以讨论问题,或者您可以自我介绍,让其他人知道您专注于工具开发的哪个领域。 这是参与项目并帮助其发展成为一个强大、充满活力、跨平台生态系统的绝佳机会。 我们迫不及待地想看看您用 Swift 构建的激动人心的事物!