转换为当前Swift语法失败 - "没有这样的模块" (Swift 4,Xcode 9)

时间:2017-09-21 08:50:26

标签: ios swift xcode swift4 xcode9

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

enter image description here

  

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

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

注意:此处不使用Cocoapods / Carthage。

注意:两个解决方案尝试(并且有效),但没有解决潜在的问题。

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

5 个答案:

答案 0 :(得分:8)

我还无法找到任何解决方案。

现在我手动设置Swift Language Version

enter image description here

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:1)

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

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

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

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

    1. 更新您的可可豆荚以及使用与最新swift语言版本兼容的可可豆荚集成的所有框架。
    2. 如果您手动集成/添加了外部/第三方框架,那么您还需要更新/替换这些框架。
    3. 需要一些手动工作才能在swift语言之间完全迁移代码。我尝试使用上述选项快速迁移,我的所有项目现在都与swift 4兼容。

答案 4 :(得分:0)

只需更新您的Pod,它就能解决问题。

要更新广告连播,

  • 打开终端并转到您的项目目录
  • 键入广告连播更新

这解决了我的问题。