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

9
我继承了一个使用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),无法在同一fat输出文件中
无法使用通用架构构建通用框架。 "AEXML"的设备和模拟器切片都构建为:arm64 重新使用--use-xcframeworks进行重建,以创建xcframework捆绑包。

快速的谷歌搜索将我带到了这里,这对我的本地机器有效。

第一次使用AppCenter,我创建了一个预构建脚本,内容如下:

#!/usr/bin/env bash

# Pre-build
# See: https://learn.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.6.0/Build/Products/Release-iphonesimulator/AEXML.framework/AEXML 具有相同的架构 (arm64),不能出现在同一个合并输出文件中。
无法使用通用架构构建“ AEXML”的设备和模拟器切片,均构建为:arm64。重新构建并使用--use-xcframeworks创建xcframework包。

如何在AppCenter中构建?

2个回答

8
--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的检查和构建需要很长时间。


是的。所以我相信 Appcenter 正在运行您的预构建脚本,以及 carthage 命令,因为它在目录中找到了 Cartfile 文件。 - sudeepdino008
虽然更好的解决方案肯定是AppCenter提供更多灵活性,让用户可以自由选择使用CocoaPods或Carthage等工具。 - sudeepdino008
早上好。这看起来很有前途。我会在几个小时后尝试一下,然后告诉你,但这看起来真的很有前途。谢谢。 - Sylar
那个克隆脚本完成了它。谢谢! - Sylar
你可以“采纳”这个答案,这样其他用户就知道它解决了你的问题。 :) @Sylar - sudeepdino008
显示剩余3条评论

6

尝试这个(您可能需要先升级您的Carthage)

carthage update --no-use-binaries --use-xcframeworks --platform iOS 

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