【问题标题】:Carthage Build Failed迦太基构建失败
【发布时间】:2018-03-31 19:12:46
【问题描述】:

我运行 carthage bootstrap --platform iOS 并得到“由于错误而跳过安装 realm-cocoa.framework 二进制文件:不兼容的 Swift 版本 - 框架是用 3.1 构建的,本地版本是 4.0”,然后在构建结束时我“构建失败:任务失败,退出代码为 65” 错误。

它指向derivedDataPath,我检查了 xcodebuild 日志以获取更多详细信息,它让我知道 "PhaseScriptExecution Download\ Core\ and\ Sync /Users/user/Libary/Caches/org.carthage .CarthageKit/DerivedData/9.0_9A###/realm-cocoa/v2.10.2/Build/Intermediates.noindex/Realm.build/Release-iphoneos/Realm.build/Script-X#X#X#X#X.sh (1 次失败)”。

但我仍然不能完全确定 Realm Cocoa 到底发生了什么,或者如何解决,你知道吗?

【问题讨论】:

  • 您可以尝试再次运行 carthage 命令并添加开关 --no-use-binaries。 (前面有两个破折号。)在处理 Swift 3.x 风格之间的兼容性问题时,这对我很有用,尽管我没有尝试过 4.0。
  • 迈克是对的。执行carthage bootstrap --platform iOS --no-use-binaries,您还应该在命令行中检查您的 Swift 版本是否与 Xcode 上包含的版本相同,以防万一您安装了多个 Xcode 版本。那是swift --version,它应该返回 4.0。一旦你确保版本运行 Carthage 命令,你就完成了。
  • @MikeTaverne 我已经尝试过了,当我遇到问题时它大部分都可以工作。我不确定问题是否更深,我需要为将来的问题修复一些额外的东西
  • @SRMR 好吧,您使用--no-use-binaries 标志是因为第三方(可能是Realm 本身?)构建的Realm 框架有缓存,因此开发人员不会构建框架并浪费时间.无论如何,该框架是使用以前版本的 Swift 构建的,因此存在不兼容问题。如果您自己构建框架,则不会有更多问题。还要检查 Carthage 的 --cache-builds 标志,它可以帮助您在每次依赖项时不重新构建。干杯!
  • @Orlando 关于 --cache-builds 标志的很棒的信息!我假设如果我在一切都在正确的框架版本上使用该命令,那么一切都会很好,直到将来有一个新版本的 Xcode/Swift 方式我将开始再次收到“不兼容版本”警告,此时最好使用carthage build 以便重建框架?

标签: ios swift xcode realm carthage


【解决方案1】:

TL;DR:确保您使用的是最新的 Swift 版本,包含在 Xcode 中,然后执行carthage bootstrap --no-use-binaries --platform iOS --cache-builds

加长版:

您在构建项目时从 Xcode 收到的错误 Incompatible Swift version - framework was built with 3.1 and the local version is 4.0 是由于 Carthage 执行下载以获得 Realm Framework 的预构建版本(这是一个节省时间的功能,但有时存在版本不兼容问题喜欢这个)。

这个下载的预构建框架是使用以前版本的 Swift 编译的(在这种情况下,错误指向使用了 v3.1。)这个错误的解决方案是使用不同的命令执行依赖项安装过程:

carthage bootstrap --platform iOS --no-use-binaries

这将有助于项目依赖项构建成功。无论如何,这可能需要很长时间,因为每次执行命令时它都会从核心构建 Realm.framework 和 RealmSwift.framework。因此可以为 Carthage 上的构建启用本地缓存。可以使用安装依赖项

carthage bootstrap --no-use-binaries --platform iOS --cache-builds

有了这个选项,迦太基会:

  • bootstrap,所以将使用Cartfile.resolved 中的版本,没有更新。
  • --no-use-binaries 无需下载预构建框架即可构建依赖项(避免版本不兼容。)
  • --platform iOS 将构建仅在 iOS 上使用的依赖项,避免为 Apple TV 或 Mac OS 构建框架,以防依赖项支持它。这会节省很多时间!
  • --cache-builds 将使 Carthage 能够将您构建的依赖项(并在重新需要时使用它)存储在本地缓存中,因此即使您再次执行该命令,它也只会复制您存储的框架,从而避免另一个耗时的构建过程。李>

【讨论】:

  • 为什么最好缓存 Carthage 构建?我们也可以使用--no-use-binaries标志,速度一样。
  • @IgorGanapolsky --no-use-binaries--cache-builds 是给迦太基的两个不相关的标志。第一个用于您不想使用预构建的二进制文件(例如在 Xcode 上触发构建问题的二进制文件),第二个是启用本地缓存以在您必须(重新)安装项目依赖项时加快进程,例如,可能在另一个项目上使用您从头开始构建的相同依赖项。
【解决方案2】:

检查您的应用程序文件夹并使用 swift 3 将您的 Xcode 版本切换到旧版本。

sudo xcode-select --switch /Applications/Xcode.app

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2017-12-19
    • 2017-10-05
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多