从Xcode 10构建前操作运行时,Carthage无法启动

9
我有一个简单的ksh脚本,运行carthage update --platform iOS作为构建前操作,在升级到Xcode 10后它开始失败。 在终端中运行该命令可以成功生成Carthage文件夹。
为了重现这个问题,请退出Xcode并删除DerivedDataCarthage文件夹。然后打开Xcode 10并尝试构建。
我收到的错误信息如下:
<unknown>:0: error: unable to load standard library for target 'arm64-apple-ios8.0-simulator'

** ARCHIVE FAILED **


The following build commands failed:
    CompileSwift normal armv7
    CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compiler
    CompileSwift normal arm64
    CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
(4 failures)
Build Failed

安装

  • Carthage 0.31.1 - 0.33.0
  • Cartfile指向 Alamofire 4.7.3

尝试过的方法

  • 使用carthage bootstrap,但不起作用
  • 将Alamofire依赖目标提高到iOS 8.4和10(来自本地分支),但不起作用
  • 所有此SO问题中的答案都不起作用
  • 打开Carthage工单建议的那样使用env -i,但不起作用

解决方案

  • 第一次构建时选择“通用iOS设备”。
  • 直接向xcodebuild传递SDK参数,在此答案中找到。这迫使您编写自己的carthage update,由checkout和build组成。只有这个选项作为Xcode Build预操作步骤才有效。该解决方案已进行测试。

一些链接

未回答的Apple论坛线程

已关闭的Alamofire工单

3个回答

7

对我起作用的解决方案是,在执行carthage update之前取消设置来自XCode 10的一个环境变量:

unset LLVM_TARGET_TRIPLE_SUFFIX

carthage update


运行得非常好...您能指出任何关于这个环境变量的文档吗? - leizeQ
这个方法适用于我在 Xcode 10.1 和 arthage 0.31.2 中的实践。 - Udaya Sri
还有其他人能在Xcode 10.3上让它工作吗?对我来说它不起作用。 - Mark

4
在我的情况下,重新启动macOS解决了这个问题。

2
我找到了一种真正有用的方法:

在执行 carthage update 命令后,写入一个有效命令

请按照以下步骤进行:

  • 确保您的命令行工具已配置为使用 Xcode 10.1。从终端运行以下命令:

    sudo xcode-select -s <path to Xcode 10.1>/Contents/Developer

  • 确保脚本文件具备所需的权限:

    chmod 777 <path-to-script-file>

  • carthage update 命令后编写一个有效命令,例如 echo succeed(这实际上是解决问题的方法):

    Example

测试环境:

  • Carthage 0.31.2
  • Xcode 10.1

演示效果

https://github.com/MojtabaHs/Carthage-WorkingDemo

- 最重要的步骤

  • 不要忘记在carthage update命令之后写入一个有效的命令

请注意,这只是解决问题的一种方法,不适用于所有carthage问题。


1
这是一个否定的回答。特定问题仅在以Xcode中定义的运行脚本构建阶段运行Carthage时发生。我在0.31.2和10.1中观察到了与0.31.1和10.0相同的行为。Carthage在命令行直接工作正常。您在示例项目中测试过吗? - bensnider
我也遇到了Carthage 0.31.2和Xcode 10.1相同的问题。 - Dávid Pásztor
@DávidPásztor,请尝试按照我添加的逐步指南进行操作。 - Mojtaba Hosseini
实际上,如果您检查自己的示例@MojtabaHosseini,删除“Carthage”文件夹并重新运行Xcode,则构建将失败,因为实际的carthage更新步骤无法构建Alamofire框架。 - bensnider
1
无论如何,就我个人而言,我正在通过提醒开发人员在检测到Cartfile和/或Cartfile.resolved更改时运行我们的“carthage update / bootstrap”脚本来解决这个问题。同时,CI也在执行shell步骤之前根据需要执行carthage更新脚本,然后再运行xcodebuild。 - bensnider
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接