如何让Xcode Cloud拉取Git LFS存储的PNG镜像文件?
我之前也碰到过一模一样的情况——明明官方说Xcode Cloud支持Git LFS,但快照测试就是因为PNG文件缺失失败。结合我的排查经验,你可以从这几个方向逐一验证:
添加构建前脚本手动触发LFS拉取
虽然官方文档宣称支持LFS,但实际构建时Xcode Cloud可能不会自动执行LFS拉取操作。你可以给构建方案加个预处理脚本强制拉取:- 打开Xcode项目,进入对应的构建Scheme
- 切换到
Build标签页,点击Pre-actions下的+号,选择New Run Script Action - 在脚本输入框中写入:
记得把git lfs pullProvide build settings from选为你的目标项目,这样脚本会在测试执行前拉取所有LFS追踪的文件。
确认
.gitattributes已推送到远程仓库
很多时候我们本地创建了.gitattributes但忘了推送到远程,导致Xcode Cloud的构建环境里没有LFS规则,自然不会去拉取文件。你可以在终端执行git ls-files -- .gitattributes确认文件已被Git追踪,再去远程仓库查看是否存在这个文件。验证LFS追踪规则的覆盖范围
你写的*.png是全局规则,但如果PNG文件集中在特定子目录,或者有个别文件被排除追踪,可能导致部分快照图没被LFS托管。可以在本地执行git lfs ls-files,看看所有需要的PNG文件是否都出现在列表里。如果有遗漏,可能需要调整规则,比如针对特定目录设置:Tests/Snapshots/*.png filter=lfs diff=lfs merge=lfs -text。检查Xcode Cloud的仓库权限
如果是私有仓库,要确保Xcode Cloud关联的Apple ID拥有仓库的完整访问权限,包括Git LFS存储的读写权限。部分代码托管平台(比如GitHub、GitLab)的LFS存储可能需要单独配置权限,你可以登录平台确认Xcode Cloud的服务账号是否有访问LFS资源的权限。本地模拟Xcode Cloud环境排查
你可以在本地先清理LFS文件的本地副本(执行git lfs clean),然后直接用xcodebuild test命令跑测试。如果本地也出现镜像缺失问题,说明是你的LFS配置本身有问题;如果本地正常,那大概率是Xcode Cloud的环境需要额外适配。
内容的提问来源于stack exchange,提问作者shim

