9

我有一个用 Swift 3.2.2 编写并使用 XCode 9.1 编译的项目

我有一个使用 Carthage 使用此命令构建的依赖项:

carthage update --platform iOS

问题是 Carthage 使用 Swift 4.0(而不是 Swift 3.2.2)构建依赖项

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

如何告诉 Carthage 使用 Swift 3.2.2 构建我的依赖项,以便可以在我的项目中使用它?

我还不想将我的项目升级到 Swift 4.0。

Xcode 9.1 同时支持 Swift 3 和 Swift 4。那么我如何告诉 Carthage 在编译依赖项时使用 Swift 3 呢?我不想告诉它使用早期版本的 XCode(我不再拥有)

4

2 回答 2

7

你说:

  1. 您的项目正在 Swift 3.2.2 中编译
  2. 您的依赖项,一旦使用 Carthage 解决并下载,将在 Swift 4 中编译(因为它的构建设置是以这种方式配置的)

在这些条件下,您将无法解决问题:因此,您不能混合使用 Swift 3 和 4: https ://github.com/Carthage/Carthage/issues/1978

为了(最终)解决这种情况,您唯一能做的就是:


方案 1

  1. 如果存在,您应该找到在 Swift 3.2 中构建的库的先前版本~
  2. 在您的 Cartfile 上,您指定该特定版本,例如:

    github "yourDependency" == x.y.z


方案 2

  1. 发射carthage update --platform iOS
  2. 进入您的依赖文件夹 ( Carthage/Checkouts/yourDependency) 并打开 .xcodeproj 以手动修改此选项:

在此处输入图像描述

  1. 那么由于您正在生成语言回归,您可能会遇到大量构建问题,您可以尝试修复它们(取决于库是否很小,这可能是可能的)。
  2. 如果您已经解决了依赖关系,则启动:

    carthage build --platform iOS

  3. 尝试编译您的项目...
于 2017-11-21T07:30:00.563 回答
0

目前唯一的解决方法是在 Xcode 中切换到新的构建系统。在工作区设置中。或降级支持 swift 3 的库版本

于 2017-11-24T00:49:07.467 回答