【问题标题】:Xcode 9 Swift Language Version (SWIFT_VERSION)Xcode 9 Swift 语言版本 (SWIFT_VERSION)
【发布时间】:2018-03-02 11:46:47
【问题描述】:

我最近将 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?

【问题讨论】:

  • 尝试清理派生数据并在 Xcode 9 上构建项目。
  • 你在 Xcode 8 中的 swift 版本是什么??
  • 我认为是 8.3.3。这是 xcode 9 之前的最新版本。

标签: ios swift xcode swift3 xcode9


【解决方案1】:

回答您的问题:
如果您拥有高级开发者帐户 (apple id),您可以从 Apple Download PortalDownload Xcode 8.3.3(或参见:Where to download older version of Xcode)下载 Xcode 8.x。您可以在单个 (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 在迁移过程中识别 Swift 语言低于 3.0 时显示的常见错误消息。


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 语法

【讨论】:

【解决方案2】:

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

要解决这个问题,请在构建设置中按 + 按钮并选择添加用户定义的设置,如下图所示

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

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

【讨论】:

  • 如果您在使用 CocoaPods 时遇到此问题,您可能需要将此构建设置添加到 pods.xcodeproject 部分。
  • 这对我有用,我还必须将构建设置中的“ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES”修改为“$(inherited)”
【解决方案3】:

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

我找到了两种解决方法:

  1. 简单方法:打开 Core Data 模型的文件检查器 (-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",错误就会消失。

要查找“内容”文件,请在 Xcode 中右键单击 .xcdatamodeld 并执行“在 Finder 中显示”。右键单击实际(Finder)文件并执行“显示包内容”

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我只需点击最新的 swift convert 按钮并设置 App target build setting-> Swift 语言版本:swift 4.0,

      希望这会有所帮助。

      【讨论】:

        【解决方案6】:

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

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

        首先,从项目中去集成cocopods依赖,然后开始将项目转换为最新的swift版本。

        在终端中进入项目目录并输入:

        pod deintegrate
        

        这将从项目中分离出 cocoaPods,并且不会在项目中留下任何 CocoaPods 的痕迹。但同时,它不会删除 xcworkspace 和 podfiles。如果他们在场也没关系。

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

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

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

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            在我的情况下,我删除了这些文件夹,所有警告都消失了,但您可以重新创建此文件夹并包含以下内容:

            file &gt; new &gt; target &gt; (uitest or unittest extensions)

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

            【讨论】:

            • 有人告诉我我的错误是什么!?
            • 我个人不会对此投反对票,您的回答没有错,但最好的地方是评论 OP 的问题。你也可以看看stackoverflow.com/help/how-to-answer,它会帮助你想出正确的方法来回答问题。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-08-30
            • 1970-01-01
            • 2017-04-30
            • 1970-01-01
            • 1970-01-01
            • 2019-03-22
            • 1970-01-01
            相关资源
            最近更新 更多