使用Swift 4.1.2编译的模块无法在Swift 4.1.50中导入:Xcode 10 Error

时间:2018-06-05 21:43:06

标签: ios cocoapods carthage xcode10 swift4.1.5

Swift 4.2问世,我在使用ObjectMapper和其他一些pod时在我的项目中收到此错误消息:

  

使用Swift 4.1.2编译的模块无法在Swift 4.1.50中导入

那么如何告诉Xcode开始更新我的项目并将其迁移到Swift 4.2?

5 个答案:

答案 0 :(得分:26)

您没有使用正确的快速版本编译迦太基模块。因此,您需要:

  1. 确保您的终端指向的是Xcode 10 Beta应用,而不是常规的Xcode:
  

sudo xcode-select -switch Xcode_beta_10.app

  1. 更新您的迦太基文件:
  

迦太基更新--iOS平台--no-use-binaries

  1. 使用Xcode返回您的项目,进行清理,构建

答案 1 :(得分:8)

Swift 4.2 中,隐式展开可选(IUO)的实现发生了变化,根据swift blog现在隐式展开的可选T!将被视为T?使用和额外的标志让编译器知道它是一个隐式的解包可选。

  

IUO的新心理模型是您考虑的一个!成为一个   同义词?另外,它在声明上添加了一个标志   让编译器知道声明的值可以隐式   展开。

由于此更改,可能存在一些源兼容性问题,可能需要您在成功编译之前修改代码。

在Swift 3中,声明如var a:Int?会导致类型为Optional,并且声明类似var b:String!会导致b具有ImplicitlyUnwrappedOptional类型。它在Swift 4.2中发生了变化,因此对于Xcode 10来说它显示了ObjectMapper的错误,它带有swift 4.2,类似的实现是针对Xcode 10的3. *进行的。

在Objectmapper库中有一些函数声明,它们先前为swift 4.1显示警告,现在显示为swift 4.2的错误。请参阅下图,了解Xcode 9.4和swift 4.1中的警告

enter image description here

ObjectMapper GitHub repo上有一些拉取请求修复了这个问题但他们正在等待新的Xcode测试版发布,因为它正在使用最近被接受的complier directive功能将与新的Xcode测试版一起发布。

更新: 问题已在ObjectMapper 3.3.0版本中修复。

答案 2 :(得分:1)

使用终端在项目目录中运行以下命令。它将更新您的广告连播。希望它能解决您的问题。

pod update ObjectMapper

答案 3 :(得分:0)

您需要在终端中切换Xcode beta版本,并在项目中删除旧版本的Carthage文档。更新迦太基carthage update --platform iOS --no-use-binaries

答案 4 :(得分:-1)

Alamofire也有同样的问题。

我的解决方法是

  1. 清理我的构建
  2. 转到File/Workspace Settings,并确保您将Legacy Build System用于Build System。然后问题解决了。