构建系统
构建服务器应用程序的推荐方式是使用 Swift Package Manager。SwiftPM 为构建 Swift 代码提供了跨平台的基础,并且非常适合拥有可以在多个 Swift 平台上编辑和运行的单一代码库。
构建
SwiftPM 可以从命令行工作,并且也集成在 Xcode 中。
你可以通过从终端运行 swift build
命令,或者在 Xcode 中触发构建操作来构建你的代码。
Docker 用法
Swift 二进制文件是特定于架构的,因此在 macOS 上运行构建命令将创建 macOS 二进制文件,类似地,在 Linux 上运行命令将创建 Linux 二进制文件。
许多 Swift 开发者使用 macOS 进行开发,这使得可以利用 Xcode 附带的强大工具。然而,大多数服务器应用程序被设计为在 Linux 上运行。
如果你在 macOS 上进行开发,Docker 是一个在 Linux 上构建和创建 Linux 二进制文件的有用工具。Apple 将官方 Swift Docker 镜像发布到 Docker Hub。
例如,要使用最新的 Swift Docker 镜像构建你的应用程序
$ docker run -v "$PWD:/code" -w /code swift:latest swift build
注意,如果你想在 Apple Silicon (M1) Mac 上为 Intel CPU 运行 Swift 编译器,请在命令行中添加 --platform linux/amd64 -e QEMU_CPU=max
。例如
$ docker run -v "$PWD:/code" -w /code --platform linux/amd64 -e QEMU_CPU=max swift:latest swift build
上述命令将使用最新的 Swift Docker 镜像运行构建,利用绑定挂载到你 Mac 上的源代码。
调试与发布模式
默认情况下,SwiftPM 将构建应用程序的调试版本。请注意,调试版本不适合在生产环境中运行,因为它们速度明显较慢。要构建应用程序的发布版本,请运行 swift build -c release
。
定位二进制文件
可以部署的二进制工件位于 Linux 上的 .build/x86_64-unknown-linux
和 macOS 上的 .build/x86_64-apple-macosx
下。
SwiftPM 可以使用 swift build --show-bin-path -c release
命令显示完整的二进制文件路径。
为生产环境构建
-
通过使用
swift build -c release
编译,以发布模式构建生产代码。运行以调试模式编译的代码会显著降低性能。 -
为了在 Swift 5.2 或更高版本中获得最佳性能,请传递
-Xswiftc -cross-module-optimization
(这在 Swift 5.2 之前的版本中不起作用) - 启用此功能应该通过性能测试来验证(因为任何优化都会更改),因为它有时可能会导致性能回退。 -
将
swift-backtrace
集成到你的应用程序中,以确保在崩溃时打印回溯信息。回溯信息在 Linux 上不能开箱即用,而这个库有助于填补这一空白。最终,这将成为一个语言特性,而不需要一个单独的库。