---
title: "Scaling iOS CI with Anka"
description: "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."
---

# Scaling iOS CI with Anka

[Shopify](https://yomu.fyi/company/shopify) · Sander Lijbrink · Jul 11, 2018

**Type:** Problem & solution

## Summary

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

- 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.
- 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.
- 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.

**Tags:** [Anka](https://yomu.fyi/topic/anka), [Buildkite](https://yomu.fyi/topic/buildkite), [iOS](https://yomu.fyi/topic/ios), [macOS](https://yomu.fyi/topic/macos)

- Source: [Shopify](https://shopify.engineering/scaling-ios-ci-with-anka)
- Source URL: https://shopify.engineering/scaling-ios-ci-with-anka
- Ingested by Yomu: 2026-09-17T14:12:58.551Z

[Read original post](https://shopify.engineering/scaling-ios-ci-with-anka)
