← blog
Self-hosted M4 vs GitHub-hosted M2: a benchmark
July 16, 2026 · 6 min read
Numbers beat adjectives. We ran the same open-source-shaped iOS project — a mixed Swift/Obj-C app with ~40 Pods and a 900-test suite — on a dedicated M4 mini (16GB) and on GitHub's hosted macOS runner. Same Xcode, same workflow, two lines of YAML different.
Results
hosted macOS MacRun M4 delta clean build 8m 40s 5m 10s -40% incremental build 3m 05s 0m 48s -74% test suite (900) 6m 20s 4m 05s -35% pod install (warm) 1m 30s 0m 06s -93%
The clean-build gap is the raw chip. The incremental and pod install gaps are the warm disk: on a dedicated box, DerivedData and the Pods cache are still there from the last run. That's the number that compounds across a busy day.
Method
- Xcode 16.2, identical
xcodebuildflags. - Hosted: default
macos-14runner, fresh each run. - MacRun: M4 · 16GB · 256GB, runner-agent supervising the service.
- Five runs each; median reported.
Your mileage varies with cache size and parallelism, but the shape holds: the dedicated box wins most on the work you repeat.
Run your own numbers on the calculator or lease a runner.