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


90

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

  • 两者的基本SDK iOS 11.1
  • 两种的Swift语言版本Swift 4.0
  • 不使用豆荚/迦太基

我希望有人会知道


看来苹果公司需要重新考虑针对目标C的10年弃用通知:^)这现在使我陷入了> 1项目中,而这两个项目都是3rdparty二进制框架。
Anton Tropashko

Answers:


137

更新:

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

对于Xcode的测试版:

请参阅下面的原始答案,然后按照上面的步骤操作。

原始答案:

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

使用以下命令检入终端:

xcodebuild -version

或者只是进入Xcode首选项->位置,然后将命令行工具检查/更改为Xcode 9.1。那你应该被设置。


1
我还清除了派生数据,并清理了项目,不知道每个人是否有必要,但似乎如此。谢谢
西蒙(Simon)

3
嗨@Zig。我在github(mattdonnelly / swifter)上使用的仓库是Swift 4.0,但是显然已经使用XCode 9.0进行了编译,所以我遇到了这个问题。在Xcode 9.1及更高版本的Github上重新编译别人的cocoapod需要采取什么步骤?
约瑟夫·博伊斯的妈妈

1
有没有一种方法可以添加命令行工具?我在命令行下拉列表中只有Xcode 9.3。我也有这个问题
塔拉·坦德尔

1
我的某些吊舱尚未为Swift 4.2做好准备,因此我不得不将其固定Swift Language VersionSwift 4这些位置。然后它起作用了。
skofgar

1
加1代表清理构建文件夹的快捷方式-我不知道该如何临时使用。
马特

25

我的问题是由于未为Swift 4.0.2编译外部框架。我已经通过Carthage添加了此文件,因此运行:

carthage update --platform iOS

然后清理项目cmd + shift + k和build文件夹cmd + option + shift + k并删除派生的数据文件夹(仅将其移动到回收站也可以)对我有用。


2
确实,这实质上是解决方案。由于苹果的最新快速更新,今天(4月18日)也发生了同样的事情!:)
Fattie

cmd + option + shift + k是更新迦太基后的窍门。谢谢!
莱昂纳多·莱特

15

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

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

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

Xcode推荐线工具

我希望这会帮助想要测试新框架的人:)


9

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

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

打开Xcode的首选项,导航到组件>工具链,然后选择已安装的Swift工具链。

现在,您可以编译并运行该应用程序。


经过2天的搜索并尝试了所有带有迦太基更新,引导程序,快速语言设置等的解决方案。我在这里找到了正确的答案:)
memresubasi

7

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

转到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

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

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

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


1
我很难找到Build Settings
钱德鲁

@Chandrew首先单击您的目标。更新的答案。
pkamb

3

就我而言(Xcode 9.2):

我去了Xcode Preferences > Locations > Derived Data

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


1

就我而言,我使用带有插件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


0

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

要重新编译,运行pod update或更新carthage(您正在使用的那个),并构建项目。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.