在 macOS 上跨平台编译 Swift 项目

Jul 09, 2026 • 预计阅读时间 1 分钟

在 macOS 上编译能在 Linux 上运行的 Swift 项目。

安装 Swiftly

下载 swiftly 安装包 swiftly

然后解压 pkg 安装包,只需要其中的 swiftly 主程序复制到 /opt/local/bin

$ pkgutil --expand-full swiftly.pkg swiftly
$ sudo mv swiftly/swiftly-1.1.3.pkg/Payload/bin/swiftly /opt/local/bin

下载安装 Swift 工具链

需要使用 swiftly 来安装 swift.org 官方上的工具链,不能直接使用 Xcode 里自带的 swift 工具链。

$ swiftly init

然后使用 swiftly 自带的脚本配置环境变量,运行后只对当前终端窗口有效。

$ . ~/.swiftly/env.sh

安装 Swift SDK for Linux

$ swift sdk install https://download.swift.org/swift-6.3.3-release/static-sdk/swift-6.3.3-RELEASE/swift-6.3.3-RELEASE_static-linux-0.1.0.artifactbundle.tar.gz --checksum 87c3eaf908e67c0e13a84367119e12273cec1d2cd3d81f7d74bb36722d6b607b

安装完后查看一下结果:

$ swift sdk list
swift-6.3.3-RELEASE_static-linux-0.1.0

跨平台编译 Linux 下的程序

$ swift build --swift-sdk x86_64-swift-linux-musl -c release
Building for production...
/Users/v/Documents/NIOForwarder/Sources/NIOForwarder/EntryPoint.swift:4:8: error: no such module 'Darwin'
 2 | import Logging
 3 | import NIOPosix
 4 | import Darwin
   |        `- error: no such module 'Darwin'
 5 |
 6 | @main

报错了,是因为 Linux SDK 中没有 Darwin 模块,需要调整项目中的源码,把 import Darwin 替换为:

#if os(macOS) || os(iOS)
import Darwin
#elseif canImport(Glibc)
import Glibc
#elseif canImport(Musl)
import Musl
#elseif os(Windows)
import ucrt
#else
#error("Unknown platform")
#endif

再重新编译一次就没问题了:

$ swift build --swift-sdk x86_64-swift-linux-musl -c release

查看一下编译好的程序文件信息:

$ file .build/release/NIOForwarder
.build/release/NIOForwarder: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=ef530910056993e46fa58dedc3bdab06db7f9683, with debug_info, not stripped

现在已经是 Linux 下的文件格式了。

参考

Swift
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

简洁现代的 Nginx TLS 配置