Shopify needed a unified CI/CD system that could give iOS developers the same reliable, disposable build environments already used for Linux and Android projects. An earlier VMware ESXi setup used a shared storage area network, but its maintenance burden and write throughput limit created stability and scalability problems. The replacement uses Anka, a Docker-like macOS virtualization layer built on Apple’s Hypervisor.framework: one Core i7 Mac Mini runs one VM with local storage, while layered images are pushed to registries and pulled across two MacStadium data centers. Buildkite agents clone temporary snapshots, boot suspended VMs in under a second, run steps, upload artifacts, and delete the VMs afterward. Shopify reports about 350 iOS build jobs per hour for roughly 60 iOS developers, with easier Xcode and macOS upgrades, no shared-storage single point of failure, and horizontal scaling, although capacity remains manually adjusted and spiky demand can increase queue times.
Context
Shopify’s existing Shopify Build system supported Linux environments through Docker and worked well for backend and Android projects, but iOS required macOS infrastructure. Cloud providers did not offer macOS hosts, while the previous VMware-based Mac Pro cluster depended on a shared storage area network that became a maintenance burden and throughput bottleneck. MacStadium provided the hardware, but its capacity could not be auto-scaled dynamically.
Approach / What changed
The implementation replaced VMware ESXi with Anka on Core i7 Mac Minis using local SSD storage and one VM per host. A controller provisions layered macOS images containing Xcode, iOS simulators, Ruby, and other dependencies, then suspends and pushes them to Anka registries. Buildkite agents clone temporary VM snapshots, boot them, mount artifact volumes, run build steps, upload artifacts to cloud storage, and delete the VMs. Registries and Mac Mini clusters operate across two MacStadium data centers.
Takeaways
1
Anka’s layered image management lets small image changes reach nodes in under 10 minutes and an Xcode upgrade complete in about an hour by reusing previous layers.
2
Running one Anka VM per Mac Mini avoids the resource contention Shopify observed when multiple VMs shared a host, while local storage removes the need for a SAN.
3
Suspended Anka VMs boot in under a second, compared with about one minute for the earlier VMware VMs, but MacStadium capacity still cannot scale dynamically with demand.
FAQ
Why did Shopify replace Mac Pros and shared storage with Mac Minis?
Anka runs on local storage, so the setup no longer required a SAN. Core i7 Mac Minis were more cost-effective than Mac Pros and offered the same or higher per-core CPU performance; Shopify could run about six Minis for the price of one Mac Pro.
How are macOS and Xcode images distributed to build nodes?
A controller provisions layered images and pushes suspended VMs to Anka registries hosted on machines with 10 Gbps networking. Mac Minis pull only new layers from registries in their respective regions, while image names and tags can identify versions or git revisions.
What scalability limitation remains in the Anka setup?
The cluster runs across two MacStadium data centers, so builds can be shifted to one region during an outage. However, Shopify cannot add capacity dynamically, and spiky daytime demand can exceed available nodes and increase queue times.
Buildkite splits CI into a hosted control plane and agents you run on your own machines. This comparison weighs that self-hosted agent model against fully hosted runners so you can pick the right fleet.
Anka is a Docker-like macOS virtualization layer for disposable CI environments. This architecture shows how images, Mac hosts, snapshots, build agents, and artifacts connect.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.