Guide
Running a Mac CI farm on dedicated Mac minis
How teams run 5 to 20 dedicated Mac minis as a CI farm: runners per project, one account, one invoice, engineers who answer.
Updated 2026-09-20
One Mac mini handles one team's iOS builds comfortably. The moment you have three apps, two branches building in parallel and a release train, you need a farm, and the way you structure it decides whether CI stays fast or becomes the thing everyone complains about.
Here is how teams run 5 to 20 dedicated Macs at MacDuty.
Start from build concurrency, not headcount
The only number that matters is how many builds must run at the same time during your busiest hour. Not developers, not repositories: concurrent builds.
A rough shape that holds for most iOS teams:
| Situation | Machines |
|---|---|
| One app, one team, PR builds | 1 to 2 |
| Two or three apps, parallel PR and nightly | 3 to 5 |
| Release train, UI tests on a device matrix | 6 to 10 |
| Agency or platform team serving many products | 10 to 20 or more |
Queue time is the signal. If builds wait more than a couple of minutes at peak, add a machine. It is cheaper than the hour every developer spends waiting.
One runner per machine, or several?
Each Mac mini runs the whole machine for you: no hypervisor, no noisy neighbour. That gives you two valid patterns.
One runner per machine
Cleanest. A build gets the entire CPU, GPU and memory. Use this for Xcode builds and UI tests, where a build will happily eat every core you give it.
Two or three runners per machine
Works when your jobs are small and I/O-bound: unit tests, linting, packaging. On a 32 GB M4 or M6, two parallel light jobs are comfortable.
Mixing both is normal: heavy machines dedicated to release builds, lighter machines packed with fast jobs.
Splitting the farm across teams and projects
Label your machines and let the pipeline route to them. The useful splits:
By project
ios-app, sdk, internal-tools. Each repository targets its own label, so a broken build on one product never blocks another.
By purpose
pr machines that are fast and always warm, release machines that get wiped before every signed build.
By client
Agencies give each client their own machines with their own credentials and certificates. Nothing shared, nothing to leak between accounts.
All of it on one MacDuty account, with one invoice at the end of the month.
Keeping a farm healthy
Reinstall between projects, not never
A Mac that has been building for a year accumulates Xcode versions, simulators and caches. Ask us for a clean reinstall when you rotate a machine to a new project.
Pin your toolchain
Same Xcode version across every machine in a pool, upgraded deliberately. A farm where machines drift produces builds that pass on one runner and fail on another.
Watch the queue, not the CPU
CPU graphs on build machines are always alarming and rarely actionable. Queue wait time tells you when to add hardware.
Keep one spare
At ten machines, one being down should be an inconvenience, not an incident.
How this compares to orchestrated Mac clouds
Orchestration platforms layer Kubernetes-style scheduling over virtualized macOS, and you pay for that layer. It is genuinely useful if you need ephemeral VMs spun up per job at large scale.
Most teams under twenty machines do not. They need a handful of fast, dedicated Macs that stay up, keep their caches warm, and cost the same amount every month. That is what a dedicated farm is: whole physical machines at a flat price, with the build cache still there for the next job instead of being thrown away with the VM.
You also get the difference that shows up at 2 a.m. before a release: the people who run the racks answer the email.
Getting a farm set up
Tell us the shape: how many machines, which models, what has to be installed on them. They arrive configured with your Xcode version, runner agent, keys and certificates, and we handle reinstalls and fleet changes as you go.
Questions
- Can I run multiple Mac minis on one MacDuty account?
- Yes. One account holds as many machines as you need, with one invoice, for yourself or for each of your companies.
- How many Mac minis do I need for iOS CI?
- Size by concurrent builds at peak, not by team size. One to two machines for a single app, three to five for a few apps building in parallel, six to twenty for a release train or an agency.
- Can I run several CI runners on one Mac mini?
- Yes. The machine is entirely yours. One runner per machine for heavy Xcode builds; two or three for light, I/O-bound jobs on a 32 GB machine.
- Can different teams or clients have separate machines?
- Yes. Machines are labelled and separated per project or per client, with their own credentials, under a single account and invoice.
- Is a dedicated Mac farm cheaper than orchestrated Mac cloud?
- For steady CI load, yes: a flat monthly price per physical machine, with no per-hour billing and no orchestration layer to pay for.
Next