在 AppCenter 中构建使用 Carthage 的应用程序

问题描述

我继承了一个用 Carthage 构建的项目。使用 Xcode 12,我遇到了这个错误

致命错误:/Applications/Xcode_12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:/Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33 /AEXML/4.6.0/Build/Intermediates.noindex/ArchiveIntermediates/AEXML iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/AEXML.framework/AEXML 和/Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/ AEXML/4.6.0/Build/Products/Release-iphonesimulator/AEXML.framework/AEXML 架构相同(arm64),不能在同一个输出文件

用通用架构构建通用框架是不可能的。 “AEXML”的设备和模拟器切片都构建为:arm64 使用 --use-xcframeworks 重新构建以创建 xcframework 包。

Quick Google search brought me to this 适用于我的本地机器。

第一次使用 AppCenter,我创建了一个 Pre-Build script内容如下:

#!/usr/bin/env bash

# Pre-build
# See: https://docs.microsoft.com/en-us/appcenter/build/custom/scripts/#pre-build
echo "Pre-build has started."
sh ./carthage.sh update --use-submodules
echo "Pre-build has ended."

我认为应该使用 Carthage 来构建这个?我在 AppCenter 中收到错误消息:

*** 在 AEXML.xcodeproj 中构建方案“AEXML iOS” 一个 shell 任务 (/usr/bin/xcrun lipo -create /Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/AEXML/4.6.0/Build/Intermediates.noindex/ArchiveIntermediates/AEXML\ iOS /IntermediateBuildFilesPath/UninstalledProducts/iphoneos/AEXML.framework/AEXML /Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/AEXML/4.6.0/Build/Products/Release-iphonesimulator/AEXML.framework/ AEXML -output /Users/runner/work/1/s/Carthage/Build/iOS/AEXML.framework/AEXML) 失败,退出代码为 1: 致命错误:/Applications/Xcode_12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:/Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/AEXML/ 4.6.0/Build/Intermediates.noindex/ArchiveIntermediates/AEXML iOS/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/AEXML.framework/AEXML 和/Users/runner/Library/Caches/org.carthage.CarthageKit/DerivedData/12.3_12C33/AEXML/4. .0/Build/Products/Release-iphonesimulator/AEXML.framework/AEXML 具有相同的架构(arm64)并且不能在同一个输出文件

用通用架构构建通用框架是不可能的。 “AEXML”的设备和模拟器切片都构建为:arm64 使用 --use-xcframeworks 重新构建以创建 xcframework 包。

如何在 AppCenter 中构建?

解决方法

--use-xcframeworks

此选项仅在 Carthage 0.37.0 中可用。 appcenter 的 carthage 版本是 0.36.0。他们需要更新 appcenter 项目中使用的迦太基。

您能否查看日志并查看此脚本是否正在运行?还是 appcenter 正在运行 carthage 二进制文件?

编辑

好消息是 appcenter 识别出迦太基 0.37.0!我在我的项目目录中添加了一个 appcenter-post-clone.sh

#!/usr/bin/env bash

set -e
set -x

carthage update --cache-builds --use-xcframeworks --platform ios
carthage version
echo "" > Cartfile
echo "" > Cartfile.resolved

appcenter 识别出使用了 --use-xcframeworks,因此需要 0.37.0。

注意:我正在清空 Cartfile*,这样 appcenter 就不会运行其原生的 carthage 命令(它在注意到 Cartfile 和 Cartfile.resolved 时会这样做)。

编辑 2

我现在正在考虑在 appcenter 中使用 carthage_cache 之类的东西,因为 carthage 结帐和构建最终会花费很多时间。