Xcode 9 Swift 语言版本 (SWIFT_VERSION)

Xcode 9 Swift Language Version (SWIFT_VERSION)

我最近将 xcode 更新到版本 9。在此之前,在 Xcode 8.x 中,每当我使用 pod update 时,它都会显示一个更新代码以进行转换Swift 3 的代码并这样做可以解决错误。但现在它给我这个错误:

The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This setting can be set in the build settings editor.

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

回答你的问题:
您可以从 Apple Download Portal or Download Xcode 8.3.3 (or see: Where to download older version of Xcode), if you've premium developer account (apple id). You can install & work with both Xcode 9 and Xcode 8.x in single (mac) system. (Make sure you've Command Line Tools supporting both version of Xcode, to work with terminal (see: How to install 'Command Line Tool'))

下载 Xcode 8.x

提示:如何迁移代码 Xcode 9 个兼容的 Swift 版本(Swift 3.2 或 4)
Xcode 9 只允许 conversion/migration 从 Swift 3.0Swift 3.2/4.0。因此,如果您项目的 Swift 语言的当前版本低于 3.0,那么您必须使用 Xcode 8.x 将代码迁移到 Swift 3 兼容版本。

这是 Xcode 9 在迁移过程中识别出低于 3.0 的 Swift 语言时显示的常见错误消息。


Swift 3.2 由 Xcode 9 和 Xcode 8 支持。

Project ► (Select Your Project Target) ► Build Settings ► (Type 'swift' in Searchbar) Swift Compiler Language ► Swift Language Version ► Click on Language list to open it.



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


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

Xcode: Menus: Edit ▶ Covert ▶ To Current Swift Syntax

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

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

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

它将修复 objective c 个项目的错误。

就我而言,在构建设置中直接将 swift 版本从 2.x 更改为 4.0 后,所有警告都消失了,除了两个警告。

这些警告与 myprojectnameTestsmyprojectnameUITests 文件夹有关。我没有注意到,我认为它与从 Xcode 7 直接迁移到 Xcode 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

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

希望这会有所帮助。

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

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

我找到了两种解决方法:

  1. 简单方法:打开 Core Data 模型的文件检查器 (-1) 并将语言从 Swift 更改为 Objective-C

  1. 更长更危险的方法

该模型包含一个 "contents" 文件,其中包含以下行:

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

里面有一个sourceLanguage="Swift"条目。将其更改为 sourceLanguage="Objective-C" 错误消失。

要找到 "contents" 文件,请右键单击 Xcode 中的 .xcdatamodeld,然后执行 "Show in Finder"。右键单击实际 (Finder) 文件并执行 "Show Package Contents"

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

此解决方案在其他方法均无效时有效:

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

首先,de-integrate项目中的cocopods依赖,然后开始将项目转换为最新的swift版本。

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

pod deintegrate

这将从项目中 de-integrate cocopods 并且不会在项目中留下任何 CocoaPods 的痕迹。但同时,它不会删除 xcworkspace 和 podfiles。有就好了

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

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

  1. 注释掉你从 cocoapods 库中使用的所有代码。
  2. 创建一个包装器class,其中包含类似于 cocopods 库的虚拟方法,然后调用它。

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

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

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