【问题标题】:Module compiled with Swift 4.0 cannot be imported in Swift 4.0.1使用 Swift 4.0 编译的模块无法在 Swift 4.0.1 中导入
【发布时间】:2018-03-25 08:43:21
【问题描述】:

但是我使用相同的 Xcode 重新编译了框架,它仍然给我这个错误。

  • 两者的基础 SDK iOS 11.1
  • Swift 语言版本 Swift 4.0 用于两者
  • 不使用 Pod/Carthage

希望有人知道

【问题讨论】:

  • Apple 似乎需要重新考虑 Objective C 的 10 年弃用通知 :^) 这让我在 >1 个项目上受到了影响,而且这两个项目都是 3rdparty 二进制框架。

标签: ios swift xcode xcode9 swift4


【解决方案1】:

更新:

对于 Xcode 的发布版本:

当使用 Xcode 9.1、9.2、9.3、9.4、10 等打开使用早期 Xcode 工具构建的框架的项目时,将发生此错误(以及涉及 Swift 4.1、4.2 等的类似错误)。

要解决此问题,请使用 Carthage(carthage update --platform iOS)、Cocoapods(pod updatepod install)更新和重建您的框架,或者使用新的更新后的 Xcode 工具手动更新和重建您的框架。当您更新 Xcode 时,这些工具应该会自动更新,但如果没有,您可以按照原始答案中概述的步骤进行操作。

您可能还需要清理您的项目 cmd + shift + k 和可能的构建文件夹 cmd + option + shift + k 以使 Xcode 不使用缓存的框架构建。

在某些情况下,您可能还需要删除派生数据文件夹(通过转到 Xcode Preferences -> Locations -> Derived Data Folder 很容易找到 (Thanks Stunner)

对于 Xcode 的 beta 版本:

查看下面的原始答案,然后按照上述步骤操作。

原答案:

您可能仍将您的 xcodebuild 工具设置为 Xcode 9.0,它使用 Swift 4.0 构建并且与 Xcode 9.1 beta 的 Swift 4.0.1 不兼容。

使用命令在终端签入:

xcodebuild -version

或者只是进入 Xcode 首选项 -> 位置并检查/将命令行工具更改为 Xcode 9.1。那么你应该已经准备好了。

【讨论】:

  • 我还清除了派生数据,并清理了项目,不知道是否对每个人都有必要,但似乎在这里。谢谢
  • 嗨@Zig。我在 github (mattdonnelly/swifter) 上使用的一个仓库是 Swift 4.0,但显然是使用 XCode 9.0 编译的,所以我遇到了这个问题。在 Github 上为 XCode 9.1 及更高版本重新编译别人的 cocoapod 需要哪些步骤?
  • 有没有办法添加命令行工具?我的命令行下拉列表中只有 Xcode 9.3。我也有这个问题
  • 我的一些 pod 还没有为 Swift 4.2 做好准备,因此我不得不将 Swift Language Version 固定到 Swift 4 上。然后它起作用了。
  • 加 1 用于清理构建文件夹的快捷方式——我不知道该怎么做。
【解决方案2】:

我的问题是由于没有为 Swift 4.0.2 编译外部框架。我已经通过Carthage 添加了这个文件,所以运行:

carthage update --platform iOS

然后清理项目cmd + shift + k 和构建文件夹cmd + option + shift + k 并删除派生数据文件夹(也可以将其移至垃圾箱)对我有用。

【讨论】:

  • 确实,这就是解决方案。由于 Apple 最新的快速更新,今天(4 月 18 日)也发生了同样的事情! :)
  • cmd + option + shift + k 是更新迦太基后的诀窍。谢谢!
【解决方案3】:

here 安装适用于您的特定 Xcode 版本的 Xcode 工具链。

Xcode 工具链包括编译器、lldb 和其他相关工具的副本,这些工具可以为在特定版本的 Swift 中工作提供有凝聚力的开发体验。

打开 Xcode 的 Preferences,导航到 Components > Toolchains ,然后选择已安装的 Swift 工具链。

这将让您现在编译和运行应用程序。

【讨论】:

  • 经过 2 天的搜索并尝试了 carthage 更新、引导程序、快速语言设置等所有可能的解决方案。我在这里找到了正确的答案 :)
【解决方案4】:

就我而言(Xcode 9.2):

我去了XcodePreferences > Locations > Derived Data

然后我删除了数据并进行了干净的构建,一切正常。

【讨论】:

    【解决方案5】:

    我在 Xcode 10 beta 中遇到了这个问题,它添加了 Swift 4.2。我的问题与 Carthage 或任何外部依赖项无关。

    转到 YourTarget > Build Settings > Swift Language Version 获取所有 Xcode 目标。

    我的都设置为Swift 4

    添加复制文件构建阶段后,我开始收到错误

    :0: 错误:Swift 4.2 编译器无法导入使用 Swift 4.1.2 编译的模块:/Users/user/Library/Developer/Xcode/DerivedData/MyApp-faskfrihumfcdibjxisjvbfshppp/Build/Intermediates.noindex/MyApp.build /Debug/MyAppExtension.build/Objects-normal/x86_64/MyClass~partial.swiftmodule

    Command MergeSwiftModule 失败,退出代码非零

    然后我将每个目标的Swift Language Version 设置为Swift 4.2,这样就消除了错误。

    不过,我不确定为什么首先会发生错误,因为将所有目标设置为 Swift 4 应该同样有效。

    【讨论】:

    • 我找不到Build Settings
    • @Chandrew 首先单击您的目标。更新了答案。
    【解决方案6】:

    就我而言,我下载了 xCode 11 Beta 版来测试 SwiftUI。当我运行我的项目时,我得到 “Swift 5.0.1 编译器无法导入使用 Swift 5.1 编译的模块:...” 错误。

    解决这个问题。我将 xCode 命令行工具更改为新的 xCode 11 注释行工具。之后,您可以使用 SwiftUI 创建新的 xcode 项目。

    Xcode -> 首选项 -> 位置 -> XCode 命令行工具

    我希望,这将帮助那些想要使用新框架进行测试的人:)

    【讨论】:

      【解决方案7】:

      就我而言,我使用带有插件 cocoapods-binary 的 CocoaPods 将库预构建为二进制文件。在我将 Xcode 从 10 升级到 11 后,Xcode 给了我这个错误:

      Module compiled with Swift 5.0.1 cannot be imported by the Swift 5.1 compiler
      

      我通过删除/Pods 目录并运行pod install 来修复它。

      【讨论】:

        【解决方案8】:

        就我而言,我用它抱怨的任何版本重新编译了框架。

        要重新编译,请运行 pod update 或更新 carthage(无论您正在使用哪个),然后构建项目。

        然后在finder中搜索框架。将theFramework.framework 复制粘贴到您的项目中,并确保“如果需要,请复制项目”。再次构建项目,它应该可以工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-08
          • 2018-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多