我正在Xcode 10.3
中创建一个简单的Swift框架,并尝试使用较低的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:
swift -version
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构建的?
答案 0 :(得分:5)
SWIFT_VERSION
(Swift语言版本)键对所得二进制文件的实际Swift版本不起作用。来自$ swift --help
:
-swift-version根据特定的Swift语言版本号解释输入
因此,基本上,Xcode使用-swift-version 4
参数执行Swift编译器。它改变了Swift编译器解析源文件的方式,但不以任何方式影响二进制文件。
要构建实际的Swift 4二进制文件,您必须安装Swift 4 toolchain。然后,您将能够从菜单Xcode -> Toolchains
中选择正确的工具链。但是,老实说,我不建议您这样做,因为Apple并不关心较旧版本的工具链,并且Xcode通常在这些工具上表现不稳定。
相反,我建议您从Apple Downloads网站安装较旧的Xcode(在您的情况下为9.3)并从那里构建项目。
或者,您可以在Github Actions,CircleCI或TravisCI中设置相对简单的CI / CD,并在那里同时构建多个Xcode版本。并在本地使用最新的Xcode。因为这些配置项为您提供了具有不同Xcode和macOS版本的多个虚拟环境。