Xcode 12与Carthage兼容问题求助:如何仅编译真机框架?
解决Carthage在Xcode 12下编译Lottie报错的临时方案:仅编译真机框架
当然可以!这确实是个能让你快速回到开发节奏的临时 workaround,针对你遇到的Lottie编译报错(lipo合并架构失败),只编译真机框架完全可行,给你两种简单的实现方式:
方法一:直接通过Carthage命令指定真机SDK
在终端执行以下命令,替换掉你原来的carthage update命令:
carthage update --platform iOS --no-use-binaries --sdk iphoneos
--platform iOS:限定只编译iOS平台的框架--no-use-binaries:强制从源码编译,避免拉取预编译的可能存在兼容问题的二进制包--sdk iphoneos:明确指定只编译真机架构的SDK,这样Carthage就不会去处理模拟器相关的架构,自然也就不会触发lipo合并失败的报错
如果只是更新单个依赖(比如你这里的Lottie),可以更精准地指定:
carthage update Lottie --platform iOS --no-use-binaries --sdk iphoneos
方法二:通过自定义xcconfig文件限制架构
如果你需要更持久的配置,也可以创建一个仅包含真机架构的xcconfig文件:
- 在项目根目录新建一个名为
OnlyDevice.xcconfig的文件,写入内容:
ARCHS = arm64 VALID_ARCHS = arm64
- 执行Carthage命令时指定这个配置文件:
carthage update --platform iOS --no-use-binaries -- xcconfig=$(pwd)/OnlyDevice.xcconfig
这种方式会强制所有依赖都只编译arm64架构的真机版本,同样能绕过lipo的报错问题。
注意事项
- 用这个方案后,你的项目暂时只能在真机上运行,模拟器会因为缺少对应架构而无法启动,等之后Carthage或Lottie修复了Xcode12的兼容问题,再去掉
--sdk iphoneos参数或者删除xcconfig的配置,重新执行carthage update就能恢复模拟器支持。 - 如果你之前已经有编译缓存,可以先执行
carthage clean清理掉旧的缓存,再执行上面的命令,避免残留的架构文件影响结果。
内容的提问来源于stack exchange,提问作者MatterGoal
相关产品推荐
相关产品推荐

