Xcode 8 Beta 3使用Legacy Swift问题

时间:2016-07-18 21:14:24

标签: swift xcode8 xcode8-beta3

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

  

“使用Legacy Swift语言版本”(SWIFT_VERSION)需要为使用Swift的目标正确配置。使用[编辑>转换> To Current Swift Syntax ...]菜单选择Swift版本或使用Build Settings编辑器直接配置构建设置。

有没有人遇到过这个?由于它是一个Objective-C项目,因此没有构建设置来配置Swift。我还确保没有项目依赖项或CocoaPods使用Swift。我唯一的解决方案是使用Beta 2.任何想法如何解决这个问题?

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

19 个答案:

答案 0 :(得分: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设置。

答案 1 :(得分:118)

我刚刚找到了解决问题的方法。

转到项目或库的Build设置并设置Swift Compiler Version属性"使用Legacy Swift语言版本"从未指定到是或否。

enter image description here

答案 2 :(得分:33)

我暂时忽略了这个问题,而在此期间只是处理其他问题 - 我终于找到了解决问题的方法。

由于我的项目是Objective-C,我想可能我正在使用的一个Pod正在使用Swift,我检查了每个Pod,但没有一个是。

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

screenshot

答案 3 :(得分:18)

此问题在Xcode-8.1中也可见。当我们添加新的Target像Extension或Widget时,第三方库在cocopods的帮助下被整合到新的目标中。 Pod安装之后。我们可能面临与上述相同的错误。

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

  

enter image description here

答案 4 :(得分:9)

如果您使用的是Xcode 8或更高版本

  1. 转到“构建设置”
  2. 查找使用旧版swift语言版本
  3. 是 - Swift 2.3
  4. 不 - Swift 3.0 enter image description here

答案 5 :(得分: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

答案 6 :(得分:4)

我得到了同样的错误。我试图搜索"使用Legacy Swift语言版本"但未找到。 我正在使用Xcode 8.3.3 经过太多的冲浪和解决后,我找到了这个解决方案,这对我有用。enter image description here

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.)

答案 7 :(得分:4)

在我的情况下,我做了以下事情

选择项目目标=>转到构建设置=>搜索“Swift语言版本”=>给出当前Swift版本的值

多数事实已经修复了我的问题

Follow This Image

答案 8 :(得分: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

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

来修复它
SWIFT_VERSION = 3.0;

似乎补丁级别版本说明符过于具体。

答案 9 :(得分:3)

设置"使用Legacy Swift语言版本"到"是"如果您在项目中使用旧版本的swift或任何快速的第三方。 "否"如果您的项目升级到当前的swift版本。 如果您没有配置swift版本,则在每次更新和安装后,Pod框架都需要指定它。

答案 10 :(得分:2)

我的项目是用Swift编写的。我和fastlane有同样的错误。发生的事情是我的Xcode自动更新所以我不得不将我的项目更新为Swift 3.0。有很多错误。修复和调试花费了太多时间,当时不值得,所以我决定安装旧版本的Xcode。将我的代码恢复为2.3。然后fastlane beta不再工作了。事实证明,我需要将命令行工具设置为7.3。 enter image description here

答案 11 :(得分:2)

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

答案 12 :(得分:1)

如果您将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES更改为NO仍然无效,那是因为xcode问题,而不是您的问题。执行以下步骤:

1.在警告目标

上将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES属性更改为YES

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

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

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

答案 13 :(得分:1)

我遇到了同样的问题并通过以下方式解决了这个问题:

在项目>构建设置:

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

然后在我的Podfile中:

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

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

最晦涩的,实际上进行了编译的进展是将Podfile中的SWIFT_VERSION从3改为3.0,如建议here

答案 14 :(得分:1)

从XCode 8开始,你可以使用swift 2.3,即使XCode 8使用swift 3.x作为默认的swift版本。要使用swift 2.3,只需在Build Setting中打开标志使用Legacy Swift语言版本为YES,然后XCode将使用Swift 2.3作为该项目目标。

答案 15 :(得分: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

也许就是这样。

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

答案 16 :(得分:1)

更新到xcode 8.3.2后我遇到了同样的问题,但选项“使用Legacy Swift语言”已经不见了。这似乎是现在改变的选择: Swift Lang Version

在Alamofire和其他lib上使用此修复程序,一切正常。

答案 17 :(得分:1)

转到项目的项目构建设置,目标做两个以下。

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
And
Swift Compiler - Version  = Swift 3

更改为最新Swift 3

错误已解决。

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

答案 18 :(得分:1)

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