未强制执行Xcode中的Swift构建设置以使用较低的4.0.3版本而不是5.0.1版本

Ale*_*akh 7 xcode xcodebuild ios swift swift-framework

我正在创建一个简单的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
Run Code Online (Sandbox Code Playgroud)

我的工具链正在运行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
Run Code Online (Sandbox Code Playgroud)

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

dos*_*osi 5

SWIFT_VERSION(Swift语言版本)键对结果二进制文件的实际Swift版本不起作用。来自$ swift --help:

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

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

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

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

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