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.0
到 Swift 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 后,所有警告都消失了,除了两个警告。
这些警告与 myprojectnameTests
和 myprojectnameUITests
文件夹有关。我没有注意到,我认为它与从 Xcode 7 直接迁移到 Xcode 9 有关,我认为我无法解决这个问题,我应该安装错过的 Xcode 8 版本。
就我而言,我删除了这些文件夹,所有警告都消失了,但您可以重新创建此文件夹并包含以下内容:
file > new > target > (uitest or unittest extensions)
我只是点击最新的 swift 转换按钮并设置 App 目标构建设置-> Swift 语言版本:swift 4.0,
希望这会有所帮助。
将 Core Data 添加到现有项目时可能会发生这种情况。
检查:
<名称>/<名称>.xcdatamodeld/<名称>.xcdatamodel/contents
文件。
此文件包含一个条目 "sourceLanguage",(默认情况下)可能已设置为 "Swift"。将其更改为 "Objective-C".
我在 Xcode 10 中创建了一个新的 Objective-C 项目后才得到这个,在我向项目添加了一个核心数据模型文件之后。
我找到了两种解决方法:
- 简单方法:打开 Core Data 模型的文件检查器 (⌥⌘-1) 并将语言从 Swift 更改为 Objective-C
- 更长更危险的方法
该模型包含一个 "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 依赖方法。
因此,要消除这些错误,您有两个选择:
- 注释掉你从 cocoapods 库中使用的所有代码。
- 创建一个包装器class,其中包含类似于 cocopods 库的虚拟方法,然后调用它。
删除所有错误后,您可以将代码转换为最新的 swift 版本。
有时如果您遇到奇怪的错误,请尝试清理派生数据并重试。
也许您需要下载工具链。
当您没有正确版本的 swift 编译器时会发生此错误。
我最近将 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 9 个兼容的 Swift 版本(Swift 3.2 或 4)
Xcode 9 只允许 conversion/migration 从 Swift 3.0
到 Swift 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 后,所有警告都消失了,除了两个警告。
这些警告与 myprojectnameTests
和 myprojectnameUITests
文件夹有关。我没有注意到,我认为它与从 Xcode 7 直接迁移到 Xcode 9 有关,我认为我无法解决这个问题,我应该安装错过的 Xcode 8 版本。
就我而言,我删除了这些文件夹,所有警告都消失了,但您可以重新创建此文件夹并包含以下内容:
file > new > target > (uitest or unittest extensions)
我只是点击最新的 swift 转换按钮并设置 App 目标构建设置-> Swift 语言版本:swift 4.0,
希望这会有所帮助。
将 Core Data 添加到现有项目时可能会发生这种情况。
检查:
<名称>/<名称>.xcdatamodeld/<名称>.xcdatamodel/contents
文件。
此文件包含一个条目 "sourceLanguage",(默认情况下)可能已设置为 "Swift"。将其更改为 "Objective-C".
我在 Xcode 10 中创建了一个新的 Objective-C 项目后才得到这个,在我向项目添加了一个核心数据模型文件之后。
我找到了两种解决方法:
- 简单方法:打开 Core Data 模型的文件检查器 (⌥⌘-1) 并将语言从 Swift 更改为 Objective-C
- 更长更危险的方法
该模型包含一个 "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 依赖方法。
因此,要消除这些错误,您有两个选择:
- 注释掉你从 cocoapods 库中使用的所有代码。
- 创建一个包装器class,其中包含类似于 cocopods 库的虚拟方法,然后调用它。
删除所有错误后,您可以将代码转换为最新的 swift 版本。
有时如果您遇到奇怪的错误,请尝试清理派生数据并重试。
也许您需要下载工具链。 当您没有正确版本的 swift 编译器时会发生此错误。