用途:在任何人尝试优化 Xcode 构建时间之前,先建立可重复的构建基线。核心规则是先测量再建议改动;clean 构建与增量构建需分别记录;各次运行的命令、destination、configuration、scheme 与预热规则保持一致;结果写入带时间戳的 JSON 到 .build-benchmark/;基准测试过程中不修改项目文件。
输入收集:确认或推断 workspace 或 project 路径、scheme、configuration、destination、是否需要模拟器或真机数据、是否需要自定义 DerivedData 路径。若项目同时存在 clean 与增量构建问题,默认两者都测。
工作树注意事项:在 git worktree 中测试时,若 SPM 包的 exclude: 路径引用了被 gitignore 的目录(如 Snapshots),会导致 xcodebuild -resolvePackageDependencies 崩溃,需先创建这些缺失目录。
默认流程:规范化构建命令并记录影响缓存或模块复用的标志;必要时先跑一次预热构建验证命令可成功;运行 3 次 clean 构建;若检测到 COMPILATION_CACHING = YES,运行 3 次带缓存的 clean 构建(脚本自动先构建预热缓存,再在每次测量前删除 DerivedData 但不删编译缓存,可用 --no-cached-clean 跳过);运行 3 次零改动构建测量固定开销下限(判断每次构建的可避免开销);可选运行 3 次带文件 touch 的增量构建,使用 --touch-file path/to/SomeFile.swift;结果与摘要存入 .build-benchmark/;报告应给出中位数与离散度,而非仅最快的单次运行。
首选命令:
python3 scripts/benchmark_builds.py
--workspace App.xcworkspace
--scheme MyApp
--configuration Debug
--destination "platform=iOS Simulator,name=iPhone 16"
--output-dir .build-benchmark
若无法使用脚本,则运行等效的 xcodebuild 命令并加 -showBuildTimingSummary,保留原始输出。
必需输出:clean 构建的中位数、最小、最大值;启用编译缓存时的 cached clean 构建数据;零改动构建数据(固定开销下限);使用 --touch-file 时的增量构建数据;耗时摘要中占比最大的类别;可能影响对比的环境信息;保存产物的路径。若结果噪声大,应说明并建议在更稳定条件下重跑。
停止时机:若用户只要求基准测试,测量后即停止。若需优化指导,可将产物交给相关专家技能:xcode-compilation-analyzer、xcode-project-analyzer、spm-build-analysis、xcode-build-orchestrator。
其他资源:基准测试契约见 references/benchmarking-workflow.md,产物格式见 references/benchmark-artifacts.md,JSON schema 见 schemas/build-benchmark.schema.json。