使用Swift 4.1.2编译的模块不能由Swift 4.2编译器导入

Hel*_*pix 16 xcode ios 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:

在此输入图像描述

  • 在Xcode 10中,我将项目设置Swift语言版设置为Swift 4.

在此输入图像描述

  • 我在命令行上验证了shell使用的Swift版本是4.1.2:

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

  • 我已经运行了carthage更新.
  • 我已经退出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错误?

Fre*_*ame 5

我并不乐观,但是我猜这是原因:

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

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

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


reg*_*ngi 0

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

sudo xcode-select -s /Applications/Xcode10.app
Run Code Online (Sandbox Code Playgroud)

另外,如果您要在 Xcode9 和 10 之间切换,我建议您执行以下操作:如果您从 9 更改为 10,请运行mv Carthage Carthage9然后重建 Carthage。每当你想切换回来时,将迦太基移动到Carthage10并执行mv Carthage9 Carthage。这将为您节省大量构建时间。