Swift 包管理器 - 如何“始终嵌入 Swift 标准库”?

Swift Package Manager - How to `Always Embed Swift Standard Libraries`?

我们有用 Swift 编写的 CLI 工具,供 macOS 上的常见用法(Android 和 iOS 开发人员使用)。 Android 未安装 Xcode 的开发人员收到以下错误:

dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: ~/git/myClITool/macosBin Reason: image not found
Abort trap: 6

我们发现在 Xcode 中启用 Always Embed Swift Standard Libraries 最有可能有所帮助,但此 CLI 工具是使用 SPM 导出的,忽略了所有 Xcode 设置。

如何仅使用 SPM 实现此构建行为?

找到以下命令行参数:--static-swift-stdlib

用法示例: swift build --static-swift-stdlib -c release

这会产生我们正在寻找的输出。不幸的是,自 Swift 5 以来,此参数 不再适用于任何平台

使用时,SPM 会抛出以下警告:

warning: Swift compiler no longer supports statically linking the Swift libraries. They're included in the OS by default starting with macOS Mojave 10.14.4 beta 3. For macOS Mojave 10.14.3 and earlier, there's an optional Swift library package that can be downloaded from "More Downloads" for Apple Developers at https://developer.apple.com/download/more/

相关 Swift 故障单:https://bugs.swift.org/browse/SR-648