M6 Mac mini vs GitHub's hosted macOS runner: an Xcode build benchmark
We wanted a real number for one question. How much faster is a dedicated M6 Mac mini than GitHub's standard hosted macOS runner, on a real iOS app? So we built the open-source Wikipedia iOS app on both, with the same Xcode and the same script, three times each.
This post replaces our earlier M4 benchmark post. Every number here comes from runs made on September 24, 2026.
Results
Median of 3 runs, in seconds. Lower is better.
GitHub-hosted MacRun M6 change
macos-26
package download 43 39 -8%
clean build 183 86 -53%
incremental build 21 10 -51%
no-op build 20 10 -50%
220 unit tests 44 17 -61%The M6 was about twice as fast at compiling. The package download was close, because both machines pull the same packages from GitHub over fast connections. Every step succeeded on both machines in every run.
What a normal CI job costs in time
The table compares the machines step by step. A real CI job is different on each. A hosted runner starts every job empty. It has to download packages, build from clean, and then test. A dedicated Mac keeps its build folder, so after a small change it only rebuilds what changed.
That is the gap your team feels. A job that took four and a half minutes finishes in under thirty seconds. On a busy day of pushes, the saved minutes add up to hours.
The same job costs money on a hosted runner. GitHub rounds each job up to the minute, so 269 seconds bills as 5 minutes. At $0.062 a minute that is about 31 cents a job. On a dedicated Mac it costs nothing extra. Our cost calculator turns your own job count into a monthly figure.
The two machines
The hardware details come from the machines themselves. Each run printed its chip, core count and memory before building. GitHub also sells larger macOS runners at higher per-minute prices. We tested the standard one because it is what most teams use.
Method
- Project: wikimedia/wikipedia-ios at commit 8691a89, built for the iOS Simulator with its Wikipedia scheme and Swift packages.
- Simulator: a new iPhone 17 on iOS 26.5, created the same way on both machines.
- Every run starts with the package cache and DerivedData deleted. Signing is off, as it usually is for CI simulator builds.
- Package download:
xcodebuild -resolvePackageDependenciesinto an empty folder. - Clean build:
xcodebuild build-for-testingwith empty DerivedData and packages already downloaded. - Incremental build: the same command after adding one comment line to one Swift file in the app.
- No-op build: the same command again with nothing changed.
- Tests: the 220 unit tests in the app's WMFData package, run with
test-without-buildingon a booted simulator. - Three full runs on each machine. We report the median.
Caveats
We ran the app's package tests, not its main test target. The main target needs signed app-group entitlements, and an unsigned CI build does not have them. Its test host kept relaunching on both machines, so it was no fair measure.
The incremental build touched one small file. Most of its 10 seconds is Xcode planning the build, which is why it matches the no-op build. A change to a widely used file would take longer on both machines.
The two machines ran different macOS versions, because each ran what its owner ships today. A hosted job can also cache Swift packages with actions/cache. That would cut the download step. It would not remove the clean build, which is most of the time.
We sell the M6 runner, so weigh our numbers with that in mind. The method above is complete enough to rerun on your own project, which is the only benchmark that really matters to you.
Questions
- What hardware is GitHub's standard macOS 26 runner?
- In our runs, the macos-26 runner reported an Apple M2 Pro (Virtual) with 5 CPU cores and 14 GB of memory. It is a virtual machine, and each job starts fresh.
- How much faster is an M6 Mac mini for Xcode builds?
- In our benchmark, a clean build of the Wikipedia iOS app took a median of 86 seconds on a dedicated M6 mini and 183 seconds on GitHub's standard macOS 26 runner. That is 53 percent faster. Incremental builds and unit tests were 50 to 61 percent faster.
- Why is a dedicated runner so much faster for everyday CI jobs?
- Mostly because it keeps its build products between jobs. A hosted runner starts every job empty, so it downloads packages and does a clean build each time. A dedicated Mac only rebuilds what changed.
- Can I reproduce this benchmark?
- Yes. The method section lists the project, the pinned commit, the Xcode build and the exact xcodebuild steps. Anyone with a Mac and GitHub Actions can run the same steps.
Run your own numbers on the calculator or lease a runner.