3

我继承了一个使用 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 包。

快速谷歌搜索把我带到了这个适用于我本地机器的地方。

第一次使用 AppCenter,我创建了一个包含以下内容的Pre-Build 脚本

#!/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."

我认为应该使用迦太基来建造这个?我在 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 /中间体。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 包。

如何在 AppCenter 中构建?

4

2 回答 2

3
--use-xcframeworks

此选项仅适用于 Carthage 0.37.0。appcenter 的 carthage 版本是 0.36.0。他们需要更新 appcenter 项目中使用的 carthage。

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

编辑

好消息是 appcenter 识别出 carthage 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 结帐和构建最终花费大量时间。

于 2021-02-15T10:56:58.960 回答
1

试试这个(你可能需要先升级你的迦太基)

carthage update --no-use-binaries --use-xcframeworks --platform iOS 
于 2021-08-26T18:40:24.243 回答