What an iOS build costs on GitHub Actions
An iOS app has to be built on macOS, and the macOS runner is the most expensive standard runner GitHub hosts: $0.062 a minute, against $0.006 for Linux 2-core x64. This page prices builds of 15, 30 and 45 minutes, one at a time and over a month on GitHub Team, with this site's calculator.
One build, ten builds, a hundred builds
The price of a build is its billed minutes times the rate. GitHub rounds each job up to a whole minute, so a build that takes 14 minutes and 20 seconds is billed as 15.
| Build length | One build | 10 builds | 100 builds |
|---|---|---|---|
| 15 minutes | $0.93 | $9.30 | $93.00 |
| 30 minutes | $1.86 | $18.60 | $186.00 |
| 45 minutes | $2.79 | $27.90 | $279.00 |
For scale, a job of the same length on Linux 2-core x64 costs $0.09, $0.18 and $0.27. A build cannot move to Linux, but the comparison shows what every macOS minute is worth: a little more than ten Linux minutes.
These are the prices of minutes beyond the plan's allowance. In a public repository the standard macOS runner is free and each of these builds costs $0.00.
How many builds the allowance covers
GitHub Team includes 3,000 minutes a month for standard runners, and a macOS minute uses one of them like any other minute. If nothing else ran, the allowance would cover 200 builds of 15 minutes, 100 builds of 30 minutes or 66 builds of 45 minutes. Spent entirely on macOS, those 3,000 minutes are worth $186.00, which makes the macOS build the best use of an allowance and the worst thing to pay for once it runs out.
In practice the allowance is shared with every other workflow in the account: pull-request checks, backend tests, scheduled jobs. The minutes those use are minutes the iOS build pays for at the macOS rate later in the month.
A month of builds on GitHub Team
Take a team that builds the app ten times each working day, 22 working days a month, in a private repository, with nothing else drawing on the allowance.
| Workload | Minutes per month | Minutes billed | Cost per month | Cost per year |
|---|---|---|---|---|
| 10 builds a day of 15 minutes | 3,300 | 300 | $18.60 | $223.20 |
| 10 builds a day of 30 minutes | 6,600 | 3,600 | $223.20 | $2,678.40 |
| 10 builds a day of 45 minutes | 9,900 | 6,900 | $427.80 | $5,133.60 |
The step from 15 to 30 minutes doubles the minutes and multiplies the bill by twelve, because the 15-minute build sits almost entirely inside the allowance and the 30-minute build does not. Build time is the number to watch: every minute shaved from a 30-minute build that runs 220 times a month is 220 macOS minutes.
On GitHub Free the allowance is 2,000 minutes. The same ten 30-minute builds a day leave 4,600 minutes billed and cost $285.20 a month, $62.00 more than on GitHub Team: the 1,000 extra included minutes at the macOS rate.
Keep macOS for what needs macOS
Not every step of a mobile pipeline needs Xcode. Linting, dependency audits, tests of shared or backend code and the build of an API the app talks to can run on Linux. Suppose a 30-minute pipeline splits into 10 minutes that need macOS and 20 minutes that do not. Run as a 10-minute macOS job and a 20-minute Linux 2-core job, it costs $0.62 plus $0.12, $0.74 in all, instead of $1.86 with everything on macOS: $1.12 less per build. Each job is still rounded up on its own, so a split only pays when the Linux part is more than a few seconds of work.
The other levers change how often the macOS job runs at all: build on pull requests that touch the app and not on every push, cancel a build when a newer push replaces it, and keep the full archive-and-sign build for the main branch and for releases.
All figures are compute only, for the standard macOS runner. Larger macOS runners have their own rates, cannot use included minutes and are priced in the full version of the calculator; seats, storage and taxes are left out.
Price your own iOS builds. Enter your builds per day and your average build length in the free calculator, set the runner mix to macOS, and read the cost per month and per year.