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

Posted

技术标签:

【中文标题】Xcode 中使用较低 4.0.3 版本而不是 5.0.1 的 Swift 构建设置未强制执行【英文标题】:Swift build settings in Xcode to use lower 4.0.3 version instead of 5.0.1 are not enforced 【发布时间】:2019-09-12 21:24:50 【问题描述】:

我正在 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:

快速版本

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 构建的?

【问题讨论】:

您找到解决此问题的方法了吗? 很遗憾,没有 您是否尝试使用 Preferences=> Toolchains 更改您的工具链并将其设置为您需要的版本? @Awad 也试过了,但很遗憾没用。 【参考方案1】:

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。因为这些 CI 为您提供了具有不同 Xcode 和 macOS 版本的多个虚拟环境。

【讨论】:

@Albi,我想说最好的方法是安装旧版本的 Xcode。 对使用新版本的人没有帮助 有什么解决办法吗?

以上是关于Xcode 中使用较低 4.0.3 版本而不是 5.0.1 的 Swift 构建设置未强制执行的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 版本 5.1.1 (5B1008) - 在 iOS 7.0 而不是 7.1 上运行模拟器

针对 XCode 4.6 下的 iOS 4.x 设备

XCode 在模拟器选择中使用 GUID 而不是 iOS 版本号

Xcode 查找错误的 OpenCV 库名称:2.4.dylib 而不是 2.4.5.dylib

如何在 Xcode 5 中使用不同的图像 iOS 6 和 iOS 7 [关闭]

如何在不更改 Xcode 版本的情况下知道 iOS 5 应用程序是不是可以在 iOS 6 上运行?