Xcode 8 Beta 3使用旧版Swift问题


201

我在Xcode 8 Beta 3中有一个Objective-C项目。自更新以来,每当尝试构建时,都会收到以下错误:

必须为使用Swift的目标正确配置“使用旧版Swift语言版本”(SWIFT_VERSION)。使用[编辑>转换>转换为当前Swift语法...]菜单选择一个Swift版本,或使用“构建设置”编辑器直接配置构建设置。

有人遇到过这个吗?由于它是一个Objective-C项目,因此没有用于配置Swift的构建设置。我还确保没有项目依赖项或CocoaPods使用Swift。我唯一的解决方案是使用Beta2。有什么想法可以解决此问题?

我还应该提到我正在运行OSX 10.12 Beta 2。


我也遇到这个问题……
rockdaswift

Answers:


364

如果您正在使用CocoaPods并希望每次执行操作时都将其自动修复pod install,则可以将以下几行添加到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 v1.1.1或更高版本,现在已解决此问题。不要忘记ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES从主要项目目标中删除设置。


24
如果您暂时尝试在代码库中使用2.3,请使用2.3代替3.0 Great solution!这将有效地使"Use Legacy Swift Language Version"No (或如果您将其更改为2.3它的Yes)。但是,此选项的好处是每次您pod install自动设置该设置时!太棒了 我看到SWIFT_VERSIONObj-C项目上也有设置。我认为没有任何不利影响吗?
Herbal7ea 2016年

8
这很棒,但是令人不安的是,没有StackOverflow的Ruby专家,成千上万的项目都是SOL。我使用“构建设置”将每个模块和Pod项目中的Xcode设置SWIFT_VERSION手动更改为2.3,该方法不起作用,但确实如此。含义隐藏着令人不安的魔术。我讨厌那个。
BaseZen

5
我确实登录是为了给您提供道具
Dnaso

1
我有一个带有Charts(在Swift中),AfNetworking和其他Obj-C容器的Obj-C项目。我在pod文件中使用了上述脚本。与swift相关的所有错误/警告均已消失,但现在我的项目找不到AFNetwoking框架。
ibnetariq

1
@ Mr.Bista批准的解决方案stackoverflow.com/a/38597681/2854405使它可以从Xcode设置运行。但您可能需要每次执行一次Pod回购时都执行此操作pod install / update。该解决方案使事情变得更快。您还可以立即更新您的Cocoapods版本:它也应该解决此问题。
Tulleb '16

119

我只是找到一种解决方法。

转到项目或库的Build设置,并将Swift Compiler Version属性“ Use Legacy Swift Language Version”从Unspecified设置为Yes或NO。

在此处输入图片说明


13
我在Objective-C项目中看不到这个选项
Bryan

您的Obj-C项目中是否有任何Swift项目库?
rockdaswift

2
如果您使用的是swift和cocoapods,则上面cocoapods中的命令可以有效地做到这一点。如果您不想每次都更改此设置,pod install建议您使用上述@Tulleb的答案。
Herbal7ea 2016年

现在我的错误是自类中的Swift编译器错误
Eduardo Oliveros

1
此选项不再可用。
Hemang

33

我已经忽略了这个问题已有一段时间了,与此同时我只是在从事其他工作-我终于找到了解决我问题的方法。

由于我的项目是Objective-C,因此我认为我正在使用的Pod之一是使用Swift,因此我检查了每个Pod,但没有一个。

最终的解决方案是将我的Core Data模型设置为在Swift中生成代码,即使我已经在File> New> NSManagedObjectSubclass菜单中手动生成了它们。我要做的就是将其切换到Objective-C。

屏幕截图


1
您是怎么找到这个的?Xcode对此什么也没说。你救了我。
瑞安

2
确实,我的解决方案和救星。谢谢!当整个应用程序是客观的时,苹果如何愚蠢地使Coredata模型自动“迅速” ....
Bob de Graaf

18

此问题在Xcode-8.1中也可见。当我们添加新的目标(如扩展程序或窗口小部件)时,第三方库将在cocopods的帮助下集成到新目标中。安装Pod之后。我们可能会遇到与上述相同的错误。

在每个库构建设置中将“ 使用旧版Swift语言版本”更改为

没有

在此处输入图片说明


就我而言,将“使用旧版Swift语言版本”设置为“是”可以解决此问题。
Jayprakash Dubey

确保对于每个有此问题的库,您都设置“是”或“否”。在我的案例中,“否”有效
hanzolo 2016年

这对我有用。请确保对测试目标也执行相同操作
zizutg

@zizutg:-我们必须交叉检查所有目标。感谢您再次指出。
Shrawan '16


5

在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

4

我正在开发一个混合了Objective-C和Swift代码的项目,我以前使用过Swift版本2.3,升级到Swift 3之后,我无法构建该项目。Xcode抱怨提到的错误消息。

显然,在我的project.pbxproj文件中仍然指定了一些过时的Swift版本。指定了Swift 3.0.1:

SWIFT_VERSION = 3.0.1;

而我已经安装了3.0.2:

$ xcrun swift -version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

如此,我通过将project-pbxproj文件中的Swift版本更改为:

SWIFT_VERSION = 3.0;

补丁程序版本说明符似乎太具体了。


4

就我而言,我只是要做以下事情

选择项目Target =>转到Build设置=>搜索“ Swift Language Version” =>给当前Swift版本赋值

就是这样,已经解决了我的问题

跟随这张图片


4

我遇到了同样的错误。我尝试搜索“使用旧版Swift语言版本”,但未找到。我正在使用Xcode 8.3.3, 在网上冲浪和解决之后,我找到了这个解决方案,这对我来说很有效。在此处输入图片说明

Here are the steps.
1=> select your target from Xcode
2=> go to build setting
3=> search for "Swift Language Version"
4=> change it to swift 3. (or accordingly.)

3

如果您在项目中或任何Swift第三方中使用旧版本的Swift,请将“使用旧版Swift语言版本”设置为“是”。如果您的项目是最新的快速版本,则为“否”。如果您未配置Swift版本,则在每次更新和安装后,Pod框架都需要指定此版本。


2

实际上,我必须搜索“ Legacy Swift”才能将其从未指定更改为“是”。当我简单地向下滚动到上述部分时,便无法更改。我希望这会对某人有所帮助。


2

我的项目是用Swift编写的。我也遇到了同样的错误fastlane。发生了什么事,因为我的Xcode自动更新了,所以我不得不将项目更新为Swift 3.0。有很多错误。修复和调试花费了太多时间,当时还不值得,所以我决定安装旧版本的Xcode。将我的代码恢复为2.3。然后fastlane beta就不工作了。原来,我需要将命令行工具设置为7.3。 在此处输入图片说明


1

我遇到了同样的问题,并通过执行以下操作解决了该问题:

在项目>构建设置中:

Always Embed Swift Standard Libraries = $(inherited) Use Legacy Swift Language Version = YES

然后在我的Podfile中:

config.build_settings['SWIFT_VERSION'] = '3.0'

使用这三个设置删除了所有警告,并允许我正确编译。

用于编译最不起眼的和什么是真正得到了进步,从3改变了Podfile的SWIFT_VERSION到3.0的建议在这里


1

从XCode 8开始,即使XCode 8使用swift 3.x作为默认的swift版本,也可以使用swift 2.3。要使用swift 2.3,只需将Build Setting中的Use Legacy Swift Language Version标记设置为YES,然后XCode将对该项目目标使用Swift 2.3。


1

在尝试复杂的解决方案之前,如果您不熟悉Cocoapods并且遇到此问题,这是您需要做的基本检查。

您可能需要:

  • 再次打开您的Podfile
  • 检查平台行是否未用“#”注释掉。最终看起来应该像这样:

platform :ios, '10.1' # Put the right version and no #platform here use_frameworks! # For swift pod "MyPod" # Your mean pod :)

  • 保存您的Podfile,关闭Xcode,然后pod install再次运行
  • 打开您的project.xcworkspace

也许就是这样。

如果没有,您可以走到上面;-)


1

更新到xcode 8.3.2后,我遇到了同样的问题,但是“使用旧版Swift语言”选项消失了。现在似乎可以选择更改: 斯威夫特郎版本

将此修复程序与Alamofire和其他库一起使用,一切正常。


1

转到项目的项目构建设置,然后执行以下两个目标操作。

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

更改为最新Swift 3

错误已解决。

如果已解决您的错误修复程序,请喜欢它。


1

在Xcode 9 Beta中。转到项目设置,构建设置,搜索Swift语言版本。在Xcode 9中,您必须指定使用的是Swift 3.2还是Swift 4。


我在9.0b中有一个项目,其中将项目和目标都设置为Swift 4继续产生错误,将两者都设置为Swift 3.2都将其删除,然后又将两者都设置为Swift 4很好,因此可以正确地完成所有操作,仍然出现错误。
green_knight

1

如果更改ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESNO仍然不起作用,那是因为xcode问题而不是您的问题。执行以下步骤:

1.将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES属性更改为YES警告目标

2.然后它将在左栏上显示警告,建议您更改为swift 3.0

3.然后更改回NO。重建项目,xcode最终检测到对NO!的更改!

在这种情况下问题解决了!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.