Swift 4.2编译器无法导入使用Swift 4.1.2编译的模块

时间:2018-09-19 20:03:49

标签: ios xcode xcode10

短篇小说:Xcode 10设置为Swift 4,但它使用的是Swift 4.2。

长话短说:我们的项目还没有为Swift 4.2做好准备,因为我们的依赖框架还不是Swift 4.2。但是,我至少要使用Xcode 10。

  • 我已经安装了Xcode 9.4.1和Xcode 10。
  • 我已将命令行工具设置为使用Xcode 9.4.1:

enter image description here

  • 在Xcode 10中,我将项目设置Swift语言版本设置为 雨燕4。

enter image description here

  • 我已经在命令行上验证了外壳程序的Swift版本 使用的是4.1.2:
  

“ swift --version Apple Swift版本4.1.2(swiftlang-902.0.54 clang-902.0.39.2)”

  • 我已经进行了迦太基更新。
  • 我已经退出Xcode 10并重新启动。
  • 我已经深度清理并删除了衍生数据。
  • 我建造了并且出现了这个错误:
  

“使用Swift 4.1.2编译的模块无法由Swift 4.2导入   编译器:   ... / App / Carthage / Build / iOS / RealmSwift.framework / Modules / RealmSwift.swiftmodule / arm64.swiftmodule“

对我来说,这表明我正确设置了预期的Swift版本(4.1.2),而Xcode仍在尝试使用错误的Swift版本(4.2)。

有人对如何解决此问题有建议吗?我想念什么吗? Xcode错误?

4 个答案:

答案 0 :(得分:4)

我不是很积极,但是我猜这是原因:

  

我将命令行工具设置为使用Xcode 9.4.1

您必须使用Xcode 10重新编译Swift 4依赖项,因为Swift is not ABI-stable(即使用不同编译器版本编译的二进制文件)不兼容。甚至使用不同版本的Xcode编译的Swift 4.0二进制文件也可能不兼容。

我对Carthage的经验不多,但是我的猜测是您应该将Xcode 10用作命令行工具,但是您必须设置一个不同的Swift语言版本以供Xcode 10使用。可以在项目中指定(在本例中为RealmSwift),也可以使用环境变量,但是恐怕您需要其他人来回答更多详细信息。

答案 1 :(得分:3)

将Realm与Xcode 10结合使用需要从源代码构建它。在终端中输入:

git clone --recursive https://github.com/realm/realm-cocoa.git

cd realm-cocoa

sh build.sh ios-swift

答案 2 :(得分:1)

您可以使用多个快速工具链。安装某些版本后,请下载网址swift toolchain download。重新启动xcode,在xocde菜单中,您可以看到工具链选项。

答案 3 :(得分:0)

我遇到了同样的问题,然后我意识到自己没有选择Xcode 10作为我的Xcode。试试:

sudo xcode-select -s /Applications/Xcode10.app

此外,如果要在Xcode9和10之间切换,我建议您执行以下操作:如果从9变为10,请运行mv Carthage Carthage9,然后重建Carthage。每当您想返回时,将迦太基移至Carthage10并执行mv Carthage9 Carthage。这样可以节省大量的时间。