【问题标题】:Tell Carthage to build dependency using Swift 3.2.2 (NOT Swift 4.0)告诉 Carthage 使用 Swift 3.2.2(不是 Swift 4.0)构建依赖项
【发布时间】:2018-04-29 06:17:38
【问题描述】:

我有一个用 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(我已经没有了)

【问题讨论】:

  • @DávidPásztor Xcode 9.1 同时支持 Swift 3 和 Swift 4。那么在编译依赖项时如何告诉 Carthage 使用 Swift 3?我不想告诉它使用早期版本的 XCode(我已经没有了)
  • here回答了同样的问题,请检查一下。
  • @lib 我没有多个版本的 XCode。我有 XCode 9.1,理论上应该能够编译 Swift 3 和 Swift 4。问题是如何告诉 Carthage 让 XCode 9.1 使用 Swift 3。

标签: swift xcode swift4 carthage swift3.2


【解决方案1】:

你说:

  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. 尝试编译您的项目...

【讨论】:

  • Xcode 9 中的 Swift 编译器在同一代码库中与 Swift 3 和 Swift 4 兼容。它们是编译器兼容的。这对我来说似乎是一个迦太基错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2017-07-03
    • 2017-02-17
    • 2018-04-18
    • 2017-01-28
    • 2015-05-09
    相关资源
    最近更新 更多