如何解决在 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 结帐和构建最终会花费很多时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。