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:

SituationMachines
One app, one team, PR builds1 to 2
Two or three apps, parallel PR and nightly3 to 5
Release train, UI tests on a device matrix6 to 10
Agency or platform team serving many products10 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