7

我正在创建一个简单的 Swift 框架Xcode 10.3并尝试使用较低Swift 4.0.3版本。我去了 Xcode 构建设置并从 5.0.1 切换到 4.0.3,然后构建项目。

在此处输入图像描述

otool针对生成的框架运行以确保它是使用正确的 Swift 版本构建的,但包含的库仍然来自 Swift 5.0.1(对应于下面输出中的 1001.0.82):

otool -l SwiftyHello.framework/SwiftyHello

cmd LC_LOAD_DYLIB
cmdsize 56
name @rpath/libswiftCore.dylib (offset 24)
time stamp 2 Wed Dec 31 16:00:02 1969
current version **1001.0.82**
compatibility version 1.0.0

我的工具链正在运行 Swift 5.0.1:

快速版本

Apple Swift version 5.0.1 (swiftlang-1001.0.82.4 clang-1001.0.46.5)
Target: x86_64-apple-darwin18.7.0

如何确保 Swift 框架是使用 Swift 4.0.3 构建的?

4

1 回答 1

6

SWIFT_VERSION(Swift Language Version) 键对生成的二进制文件的实际 Swift 版本没有任何作用。来自$ swift --help

-swift-version 根据特定的 Swift 语言版本号解释输入

-swift-version 4所以,基本上,Xcode 使用参数执行 Swift 编译器。它改变了 Swift 编译器解析源文件的方式,但不会以任何方式影响二进制文件。

要构建实际的 Swift 4 二进制文件,您必须安装 Swift 4工具链。然后您就可以从菜单中选择正确的工具链Xcode -> Toolchains。但是,老实说,我不建议这样做,因为 Apple 不关心旧版本的工具链,而且 Xcode 通常对它们表现得不稳定。

相反,我建议您从Apple 下载网站安装较旧的 Xcode(在您的情况下为 9.3)并从那里构建项目。

或者,您可以在Github ActionsCircleCITravisCI中设置相对简单的 CI/CD ,并在那里同时构建多个 Xcode 版本。并在本地使用最新的 Xcode。因为这些 CI 为您提供了具有不同 Xcode 和 macOS 版本的多个虚拟环境。

于 2019-11-15T00:55:40.700 回答