“Use Legacy Swift Language Version”(SWIFT_VERSION)需要正确配置,以便为使用Swift的目标设置。

17
自从我更新了Xcode 8.2(来自应用商店的GM种子版本)后,我一直卡在以下错误上: “使用传统的 Swift 语言版本”(SWIFT_VERSION)需要为使用 Swift 的目标正确配置。使用 [编辑 > 转换 > 到当前 Swift 语法…] 菜单选择一个 Swift 版本或使用构建设置编辑器直接配置构建设置。 因此,我去到我的目标的“构建设置”,并搜索了“SWIFT_VERSION”以查看我的错误在哪里。然而,我惊讶地发现它已经被设置为“No”! 我该怎么办?

1
在幕后,“使用旧版Swift语言版本”是buildSettings中的SWIFT_VERSION键。在XCode 8.1中,将选项设置为“否”意味着SWIFT_VERSION = 3.0.1,而在XCode 8.2中,它只是SWIFT_VERSION = 3.0。因此会产生“有趣”的副作用。 - 0x416e746f6e
以下所有回复中都忽略了一个关键点,即XCode 8.2支持Swift3和Swift2.x作为“Legacy Swift Language Version”。直到XCode 9(可能还有8.3)才引入了Swift4。那时,UI界面改变以显示SWIFT_VERSION。因此,所有声称只需搜索“SWIFT_VERSION”的答案都是错误的。的确,您可以在project.pbxproj文件中搜索此变量,因为即使在旧项目中,该变量也存在于文件中。我花了一段时间才弄清楚这一点。 - truedat101
7个回答

17
Xcode 8似乎错误地显示了一个不存在的(可以说是“幻影的”)No。这个问题有一个微不足道的解决方法:
  1. 点击SWIFT_VERSION旁边的小箭头以切换下拉列表。
  2. DebugRelease的值设置为Yes
  3. DebugRelease的值重新设置为No
下面的图片是在将Debug设置为No后拍摄的。Xcode显示DebugRelease都被设置为No,但是SWIFT_VERSION读取的是<Multiple Values>enter image description here 基于此,我只能得出这是一个bug的结论;某个值(或更可能是空值)被误传为 No

我正在使用Xcode 9.3,但在构建设置中找不到任何“Swift编译器”或“Swift版本”...你有什么线索吗? - Anurag Sharma

16

请在pod Alamofire中选择目标,搜索'SWIFT_VERSION',选择swift3。在这里输入图片描述


7

Xcode 8.3.2 转到:

构建设置 > Swift 编译器 - 版本 > 更改 Swift 版本

....可行


2

以防其他人遇到我刚遇到的问题。

我有一个应用程序已准备好发布到应用商店,但我还在等待时更新到Xcode 9 beta并进行了一些更改。我试图将其上传到应用商店,但它说您不能使用beta版本进行上传,因此我回到了Xcode 8,但它开始给出“Swift Language Version”(SWIFT_VERSION)错误。

我的解决方法

在项目构建设置下 > Swift编译器版本 > 我不得不将其从Swift 4(目前不支持)更改为Swift 3

问题解决:)


1

幽灵无法回答。苹果XCode破损的真正原因是因为苹果的XCode“使用旧设置”实际上是一个Swift版本号。在XCode 8.1中,“No”被翻译为3.0.1,在XCode 8.2中,“No”被翻译为3.0。因此,您需要将版本切换到Swift 3.0。这很有道理。我想这是XCode 8.1中的一个错误。

我的git diff:

--- a/ios/myapp.xcodeproj/project.pbxproj
+++ b/ios/myapp.xcodeproj/project.pbxproj
@@ -1757,7 +1757,7 @@
                                SDKROOT = iphoneos;
                                SKIP_INSTALL = YES;
                                SWIFT_OPTIMIZATION_LEVEL = "-Onone";
-                               SWIFT_VERSION = 3.0.1;
+                               SWIFT_VERSION = 3.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
                        };
                        name = Debug;

我看到上面有一个评论给出了相同的答案,只是觉得需要更加突出。


0

我曾经遇到过“使用旧版Swift语言版本”的问题,但是我通过设置版本解决了它。以下是解决问题的提示:

  1. 当您打开目标时,会显示一个通知“转换为当前Swift语法”,您应该选择“稍后”,接下来还有另一个通知,仍然选择“稍后”。
  2. 如果您的目标已经添加了CocoaPods,请在podFile的末尾添加以下代码:

    post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.0' end end end

添加完代码后,请更新cocoaPods。

  1. 点击pod文件,会显示所有第三方库列表。找到每个库的“Build Setting”,并搜索“Use Legacy Swift Language Version”类型,将其值设置为YES。
  2. 可能会出现一些警告或错误,这些都来自版本上传,您可以通过红色圆圈提示进行更正。

-----如果您未添加cocoaPods,您可以将目标版本设置为YES(TARGETS->构建设置->使用传统的Swift语言版本-> YES)希望能对您有所帮助。


0

我昨天也遇到了同样的问题。以下是修复步骤:

  1. 构建设置 -> 搜索 Swift,选择使用旧版 Swift 语言版本

  2. 切换“否”为“是” -> 构建。你会得到更多错误提示。

  3. 再次将切换开关从“是”改为“否”,构建 -> 成功!

有时候苹果让我们变得如此疯狂 :)

所有步骤完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接