使用Swift 4.0编译的模块无法在Swift 4.0.1中导入

问题描述 投票:66回答:6

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

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

我希望有人知道

ios swift xcode xcode9 swift4
6个回答
118
投票

更新:

对于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首选项 - >位置 - >派生数据文件夹(Thanks Stunner)轻松找到

对于Xcode的beta版本:

请参阅以下原始答案,然后按照上述步骤操作

原答案:

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

使用以下命令检入终端:

xcodebuild -version

或者只是进入Xcode首选项 - >位置并检查/更改命令行工具到Xcode 9.1。你应该设置。


22
投票

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

carthage update --platform iOS

然后清理项目cmd + shift + k和构建文件夹cmd + option + shift + k并删除派生数据文件夹(只是将其移动到垃圾工作)为我工作。


8
投票

安装从here为您工作的特定Xcode版本的Xcode工具链。

Xcode工具链包括编译器,lldb和其他相关工具的副本,这些工具为在特定版本的Swift中工作提供了一致的开发体验。

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

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


7
投票

我用Xcode 10 beta来解决这个问题,它增加了Swift 4.2。我的问题与迦太基或任何外部依赖无关。

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

我的都被设置为Swift 4

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

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

命令MergeSwiftModule失败,出现非零退出代码

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

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


4
投票

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

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

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

Xcode Commend Line Tool

我希望,这将有助于想要使用新框架测试的人:)


3
投票

就我而言(Xcode 9.2):

我去了Xcode Preferences > Locations > Derived Data

然后我删除了数据,并做了一个干净的构建,没关系。

© www.soinside.com 2019 - 2024. All rights reserved.