Xcode 9 Swift语言版(SWIFT_VERSION)

时间:2017-09-21 08:03:14

标签: ios swift xcode swift3 xcode9

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

  

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

对于此错误,我尝试了Build Settings > Swift Language Version,它是Swift 3.2 但是,由于更新调用重新安装了一些像Alamofire这样的pod,并且它说要安装Xcode 8.x将代码转换为Swift 3,所以我是否需要安装带有最新Xcode的附加版本?如果是,那么如何使用Xcode 9安装Xcode 8?

8 个答案:

答案 0 :(得分:161)

回答您的问题:
如果您是高级开发者帐户(苹果ID),可以从Apple Download PortalDownload Xcode 8.3.3下载Xcode 8.x(或参见:Where to download older version of Xcode)。你可以安装&在单(mac)系统中使用Xcode 9和Xcode 8.x. (确保您Command Line Tools支持两种版本的Xcode,以便与终端配合使用(请参阅:How to install 'Command Line Tool'))

提示:如何迁移代码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语言时显示的常见错误消息。

enter image description here

SWift 3.2支持Xcode 9& Xcode 8都是。

  

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

enter image description here


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

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

  

Xcode:菜单:编辑▶隐藏▶到当前的Swift语法

enter image description here

答案 1 :(得分:50)

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

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

build setting

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

enter image description here

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

答案 2 :(得分:2)

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

我发现了两种解决方法:

  1. 简便方法:打开核心数据模型的文件检查器( - 1 ),并将语言从Swift更改为Objective- C

Change Core Data model language

  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",错误消失。

要查找“内容”文件,请右键单击Xco​​de中的.xcdatamodeld,然后执行“在Finder中显示”。右键单击实际的(Finder)文件,然后执行“显示软件包内容”

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我只需点击最新的swift转换按钮并设置App target build setting-&gt; Swift语言版本:swift 4.0,

希望这会有所帮助。

答案 5 :(得分:0)

该解决方案在其他方法均无效时起作用:

我花了一个多星期的时间来转换整个项目,并在下面找到了解决方案:

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

转到终端中的项目目录并输入:

pod deintegrate

这将取消项目中的共足类动物的整合,项目中将不会留下任何痕迹。但同时,它不会删除xcworkspace和podfile。没关系,没关系。

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

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

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:-4)

在我的情况下,除了两个警告之外,我在构建设置中直接将swift版本从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