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

Posted

技术标签:

【中文标题】Swift 包管理器 - 如何“始终嵌入 Swift 标准库”?【英文标题】:Swift Package Manager - How to `Always Embed Swift Standard Libraries`? 【发布时间】:2019-09-23 13:38:25 【问题描述】:

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

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 实现这种构建行为?

【问题讨论】:

【参考方案1】:

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

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

这将产生我们正在寻找的输出。不幸的是,从 Swift 5 开始,这个论点不再适用适用于任何平台。

使用时,SPM 会引发以下警告:

警告:Swift 编译器不再支持静态链接 斯威夫特库。它们默认包含在操作系统中 macOS Mojave 10.14.4 beta 3。对于 macOS Mojave 10.14.3 及更早版本, 有一个可选的 Swift 库包,可以从 面向 Apple 开发人员的“更多下载”,网址为 https://developer.apple.com/download/more/

相关的 Swift bugticket:https://bugs.swift.org/browse/SR-648

【讨论】:

以上是关于Swift 包管理器 - 如何“始终嵌入 Swift 标准库”?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 Swift 包管理器更新 iOS 模拟器部署目标?

如何使用 Swift 包管理器从 repo 中排除文件/文件夹?

如何在 Xcode 11 中删除 Swift 包依赖项?

Swift 包管理器教程

Swift 包管理器目标链接