Xcode 8 Beta 3使用旧版Swift的问题

202

我在Xcode 8 Beta 3中有一个Objective-C项目。自从更新后,每次尝试构建时都会出现以下错误:

  

需要为使用Swift的目标正确配置“使用传统的Swift语言版本”(SWIFT_VERSION)。使用[编辑>转换>为当前的Swift语法…]菜单选择Swift版本或使用Build Settings编辑器直接配置构建设置。

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

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


我也遇到了这个问题... - rockdaswift
20个回答

364

如果您正在使用CocoaPods,并希望每次执行 pod install 时自动修复它,那么您可以将以下这些行添加到您的Podfile文件的末尾:

如果您正在使用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。非常好的解决方案!这实际上将“使用旧版 Swift 语言”设置为“否”(或者如果您将其更改为 2.3,则是“是”)。不过该选项的好处是每次使用 pod install 命令时都会自动设置该设置!太棒了。我发现 SWIFT_VERSIONObj-C 项目中也会被设置。我假设这不会产生任何负面影响? - Herbal7ea
8
这很棒,但让人不安的是,如果在StackOverflow上没有Ruby专家,成千上万的项目就会遇到问题。我手动更改了每个模块中以及Pod项目中的Xcode设置SWIFT_VERSION为2.3,使用Build Settings,但这并没有起作用,而这样做却奏效了。这意味着存在某种神秘而令人不安的隐藏机制,我很讨厌这种情况。 - BaseZen
5
我特地登录只是想赞扬你这件事。 - Dnaso
1
我有一个使用Charts(在Swift中)、AfNetworking和其他一些Obj-C pods的Obj-C项目。我在我的pod文件中使用了上面的脚本。所有与Swift相关的错误/警告都消失了,但现在我的项目找不到AFNetworking框架了。 - ibnetariq
1
@Mr.Bista 经过批准的解决方案 https://dev59.com/t1oT5IYBdhLWcg3wjwB-#38597681 使其可以从Xcode设置中工作。但是,每次进行“pod install / update”时,您可能需要对每个单独的Pod repo执行此操作。这个解决方案使事情更快。您现在也可以更新Cocoapods版本:它应该也可以解决此问题。 - Tulleb
显示剩余8条评论

119

我刚刚找到了一个修复它的方法。

前往项目或库的构建设置,并将Swift编译器版本属性“使用遗留的Swift语言版本”从未指定更改为Yes或NO。

输入图像描述


13
我在我的 Objective-C 项目中没有看到这个选项。 - Bryan
你的 Obj-C 项目中有任何 Swift 项目库吗? - rockdaswift
2
如果你在使用Swift和Cocoapods,上面的命令在Cocoapods中能够有效地完成这个任务。如果你不想每次执行pod install时都要更改此项设置,我建议采用@Tulleb提供的解决方案。 - Herbal7ea
现在我的错误是自我类中的Swift编译器错误。 - Eduardo Oliveros
在我的情况下,点击“Pods.xcodeproj”,选择“ReactiveCocoa”→“使用旧版Swift语言版本”:将未指定更改为YES或NO。 - PodBlood
1
此选项不再可用。 - Hemang

34

我已经忽略这个问题一段时间了,同时只是在处理其他事情 - 我终于找到了解决方法。

由于我的项目是Objective-C,我想也许我正在使用的Pod之一正在使用Swift,我检查了每个Pod,但它们都不是。

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

截图


1
你是怎么发现这个问题的?Xcode没有任何提示。你救了我。 - Ryan
2
确实,我的解决方案和救星。谢谢!苹果公司让Coredata模型自动“Swifty”,而整个应用程序都是Objective-C,这真是太愚蠢了。 - Bob de Graaf

18

这个问题也可以在Xcode-8.1中看到。当我们添加新的Target,例如Extension或Widget,并使用cocoapods集成第三方库到新目标时,在Pod install之后,我们可能会遇到与上述相同的错误。

将每个库的“Build Setting”中的Use Legacy Swift Language Version更改为

No

enter image description here


在我的情况下,将“使用传统的Swift语言版本”设置为“是”解决了这个问题。 - Jayprakash Dubey
确保对于出现这个问题的每个库,您要么设置为“是”,要么设置为“否”... 在我的情况下,“否”起作用。 - hanzolo
这对我有用。请确保您也对测试目标执行相同的操作。 - zizutg
@zizutg:我们需要在所有目标中进行交叉检查。再次感谢您的指出。 - Shrawan

9

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

  1. 进入构建设置
  2. 查找使用旧版Swift语言版本
  3. 是 - Swift 2.3
  4. 否 - Swift 3.0 enter image description here

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

在我的情况下,我只需要按照以下步骤进行操作:

选择项目目标=>进入构建设置=>搜索“Swift语言版本”=>将值设置为当前的Swift版本

这样就解决了我的问题。

Follow This Image


4

我也遇到了同样的错误。我试着搜索“使用旧版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.)

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

所以,我通过更改项目-pbxproj文件中的Swift版本来解决了这个问题:

SWIFT_VERSION = 3.0;

看起来补丁级别版本说明符太具体了。


3

如果您在项目中使用旧版的Swift或者任何第三方Swift库,请将"Use Legacy Swift Language Version"设置为"YES"。如果您的项目已经更新到当前版本的Swift,请将其设置为"No"。 如果您没有配置Swift版本,则每次更新和安装Pod框架时需要指定此设置。


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