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 在模拟器选择中使用 GUID 而不是 iOS 版本号
Xcode 查找错误的 OpenCV 库名称:2.4.dylib 而不是 2.4.5.dylib