Xcode 9 Swift语言版本(SWIFT_VERSION)


115

我最近将xcode更新到了版本9。在此之前,每当我使用Xcode 8.x时,pod update它都会向我显示一个更新代码,将该代码转换为Swift 3并解决了错误。但是现在它给了我这个错误:

对于使用Swift的目标,必须将“ Swift语言版本”(SWIFT_VERSION)构建设置设置为支持的值。可以在构建设置编辑器中设置此设置。

对于这个错误,我尝试过Build Settings > Swift Language Version,它是Swift 3.2,但是由于更新调用已重新安装了某些Pod,例如Alamofire,并说要安装Xcode 8.x才能将代码转换为Swift 3,所以我需要安装一个最新的Xcode的附加版本?如果是,那么如何将Xcode 8与Xcode 9一起安装?


尝试清理派生数据并在Xcode 9上构建项目
。– iAviator

您在Xcode 8中的迅捷版本是什么?
santhoshkumar

我认为是8.3.3。它的Xcode 9.在最新一期
乔杜里塔拉

Answers:


181

回答您的问题: 如果您有高级开发人员帐户(苹果ID),则
可以从Apple下载门户网站下载Xcode 8.x 或下载Xcode 8.3.3(或参阅:从何处下载Xcode的较早版本)。您可以在单个(mac)系统中安装和使用Xcode 9和Xcode8.x。(请确保您Command Line Tools同时支持两种版本的Xcode,以与终端一起使用(请参阅:如何安装“命令行工具”))


提示:如何迁移代码Xcode 9兼容的Swift版本(Swift 3.2或4)
Xcode 9仅允许从Swift 3.0到的转换/迁移Swift 3.2/4.0。因此,如果项目的当前Swift语言版本低于3.0,则必须使用Xcode 8.x在兼容Swift 3的版本中迁移代码。

这是Xcode 9在迁移过程中是否识别3.0以下版本的Swift语言时显示的常见错误消息。

在此处输入图片说明


Xcode 9和Xcode 8均支持Swift 3.2。

项目►(选择项目目标)►构建设置►(在搜索栏中键入“ swift”)Swift编译器语言►Swift语言版本►单击“语言”列表将其打开。

在此处输入图片说明



使用Xcode 8将源代码从Swift 2.0转换为3.2,然后继续使用Xcode 9(Swift 3.2或4)。


为了更轻松地迁移代码,请按照以下步骤操作:(它将帮助您转换为Xcode工具支持的swift的最新版本)

Xcode:菜单:编辑▶隐藏▶转换为当前Swift语法

在此处输入图片说明


9
如果您是因为现在才到这里(2018年12月)来清理一些Swift 2代码而来的,那么您会失望地得知Xcode 8无法在Mojave上运行。
bugloaf

53

对于使用Xcode 8创建并现在在Xcode 9中打开的Objective C项目,它显示的错误与问题中提到的相同。

要解决此问题,请在“构建设置”中按+按钮,然后选择“添加用户定义的设置”,如下图所示。

构建设置

然后在新创建的行中,添加SWIFT_VERSION键和3.2值,如下所示。

在此处输入图片说明

它将修复目标c项目的错误。


2
这对我有帮助。谢谢。
安德烈亚斯·卡夫

9
如果CocoaPods遇到此问题,则可能需要将此构建设置添加到pods.xcodeproject部分。
斯图尔特·麦克唐纳'18

1
这对我有用,我还必须将构建设置中的“ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES”修改为“ $(继承)”
F-

1
2个月后再次感谢您
1

1
欣赏解决方案。
user366584

4

在将Core Data模型文件添加到项目后,在Xcode 10中创建了一个新的Objective-C项目之后,我才刚得到这个。

我发现了两种解决方法:

  1. 简单方法:打开Core Data模型的File Inspector(- 1),然后将语言从Swift更改为Objective-C

更改核心数据模型语言

  1. 更长更危险的方法

该模型包含带有以下内容的“内容”文件:

<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="17G5019" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">

在其中有一个sourceLanguage="Swift"条目。更改为sourceLanguage="Objective-C",错误消失。

要找到“目录”文件,请.xcdatamodeld在Xcode中右键单击并执行“在Finder中显示”。右键单击实际的(Finder)文件,然后执行“显示软件包内容”

另外:更改模型的语言将阻止Xcode在Swift中生成托管对象子类文件。


1

当您将Core Data添加到现有项目时,可能会发生这种情况。
检查以下内容:
<名称> / <名称> .xcdatamodeld / <名称> .xcdatamodel / contents
文件。
该文件包含一个条目“ sourceLanguage”(默认情况下),该条目可能已设置为“ Swift”。将其更改为“ Objective-C”。


0

我只需点击最新的swift转换按钮,然后设置App目标构建设置-> Swift语言版本:swift 4.0,

希望这会有所帮助。


0

此解决方案在没有其他效果时起作用:

我花了一个多星期的时间来转换整个项目,并得出以下解决方案:

首先,从项目中解散cocopods依赖项,然后开始将项目转换为最新的快速版本。

转到终端中的项目目录,然后键入:

pod deintegrate

这将使项目中的共足动物解体,并且项目中将不会留下任何痕迹。但同时,它不会删除xcworkspace和podfile。没关系,如果有的话。

现在,您必须打开xcodeproj(而不是xcworkspace),因为在主项目中调用了cocoapods依赖方法,您将得到很多错误。

因此,要消除这些错误,您有两种选择:

  1. 注释掉您在cocoapods库中使用过的所有代码。
  2. 创建一个包装类,该包装类具有类似于cocopods库的伪方法,然后调用它。

清除所有错误后,您可以将代码转换为最新的快速版本。

有时,如果您遇到奇怪的错误,请尝试清除派生数据,然后重试。


0

也许您需要下载工具链。如果您没有正确版本的swift编译器,则会发生此错误。


-3

就我而言,在我将构建版本中的快速版本从2.x直接更改为4.0之后,所有警告都消失了,只有两个警告。

这些警告与myprojectnameTestsmyprojectnameUITests文件夹有关。我没有注意到,我认为这与从Xcode 7到Xco​​de 9的直接迁移有关,我认为我无法解决此问题,因此我应该安装错过的Xcode 8版本。

就我而言,我删除了这些文件夹,所有警告都消失了,但是您可以重新创建此文件夹并使用以下内容:

file > new > target > (uitest or unittest extensions)

并将本文用于创建测试用例:https : //developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/04-writing_tests.html


有人告诉我我的错!
iman kazemayni

2
我个人不会对此表示反对,您的回答没有错,但是最好的地方是对OP的问题发表评论。您也可以查看stackoverflow.com/help/how-to-answer,这将帮助您提出正确的回答问题的方法。
grassyburrito
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.