【问题标题】:Convert to Current Swift Syntax Failed - "No such module" (Swift 4, Xcode 9)转换为当前 Swift 语法失败 - “没有这样的模块”(Swift 4,Xcode 9)
【发布时间】:2018-03-02 12:58:00
【问题描述】:

在 Xcode 9 中,我正在尝试自动转换为 Swift 4。 它失败并显示以下消息:

转换为当前的 Swift 语法失败
在尝试迁移之前,请确保所有选定的目标都使用当前配置的 Swift 版本成功构建。

它抱怨缺少模块。但是当我进行常规构建时,没有问题。不确定这是否相关,但该模块(Xcode 抱怨的模块丢失了)之前已经转换为 Swift 4(在它自己的项目中)。

注意:这里没有使用 Cocoapods / Carthage。

注意:两种解决方案已尝试(并且有效),但没有解决根本问题。

  • 一种解决方案是手动进行转换(在构建设置中将 Swift 版本更改为 4 并一一应用 Fix-It,直到不再出现构建错误)。
  • 另一个解决方案是禁用第三方框架(注释掉所有使用它的代码),进行自动迁移,然后重新启用框架。对于较大的项目,这可能会变得非常困难。

【问题讨论】:

  • 请构建您的项目并检查项目是否构建成功。然后尝试转换
  • Pulkit,如前所述,“但是当我进行常规构建时,没有问题。”。
  • 参考此swift.org/migration-guide-swift4 请说明您从哪个版本转换
  • 您可以删除您正在使用的库...然后尝试转换应用程序..只有在您不必注释大量代码的情况下...
  • 对于使用 CocoaPods 的任何人,可能值得尝试删除“use_modular_headers!”暂时并将其替换为“use_frameworks!”用于迁移。

标签: ios swift xcode swift4 xcode9


【解决方案1】:

我还没有找到任何解决方案。

现在我修复了手动设置Swift Language Version

从 3.2 更改为 4.0 后,我手动编译并修复错误和警告。
我正在等待更好的解决方案!

【讨论】:

    【解决方案2】:

    我在将项目转换为 Swift 4.0 时也遇到了这个问题。当您尝试转换导入已在 Swift 4.0 中的框架的目标时,似乎会出现问题。在您的屏幕截图中,您尝试转换 'RecipeTextParser',它导入 'SovaTools',它已经是 Swift 4.0。

    我发现肮脏但有效的解决方案。您可以在转换时使用旧版(Swift 3.2)“SovaTools”。您应该在转换工具的目标选择窗口中检查它的标记。然后,当 'RecipeTextParser' 成功转换后,您可以再次使用 Swift 4.0 'SovaTools' 版本。

    【讨论】:

      【解决方案3】:

      我收到了这个错误,就我而言,我的一个 Pod(Xcode 抱怨的那个)是 Swift 4 目标,其余的是 Swift 3.2。查看构建日志,Xcode 似乎在一个位置构建了该框架,并在另一个位置搜索它。当我将该 Pod 恢复为旧版本(使用 Swift3.2)时,问题就消失了。显然是一个 Xcode 错误。高温

      【讨论】:

        【解决方案4】:

        只需更新您的 pod,它就会解决问题。

        更新 pod:

        • 打开终端并进入你的项目目录
        • 键入 pod 更新

        这解决了我的问题。

        【讨论】:

          【解决方案5】:

          Xcode (Xcode 9) 语言迁移功能并不准确,它可以将您的完整代码/项目从一个快速版本迁移到另一个零容忍版本。它为我们(开发人员)跳过了一些代码迁移。这可能是工具的错误或不准确。但是您还需要进行一些手动操作,以便为您的项目/代码完全迁移 swift 语言版本。

          现在,根据您的快照,Xcode 显示“RecipeTextParser”框架并出现错误。我认为这是一个外部/第三方框架。还有一点需要注意,你已经使用 CocoaPods 集成了这个框架:

          以下任何一种都可能导致代码迁移失败:

          1. CocoaPods 锁定框架(文件)以进行编辑。因此语言迁移过程可能无法迁移(或识别)外部/第三方框架的代码。
          2. 一般来说,Framework 是代码文件的包,因此框架本身可能不允许文件/源代码编辑。

          建议作为解决方案:

          1. 更新您的可可豆荚以及使用可可豆荚集成的所有框架,与最新的 swift 语言版本兼容。
          2. 如果您手动集成/添加了外部/第三方框架,那么您还需要更新/替换这些框架。

          在 swift 语言之间完全迁移代码需要一些手动操作。我尝试使用上述选项进行 swift 迁移,现在我的所有项目都与 swift 4 兼容。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-11
            • 2019-06-02
            • 1970-01-01
            • 2016-11-04
            • 1970-01-01
            • 2020-10-23
            相关资源
            最近更新 更多