
GitHub Actions charges $0.062 per macOS build-minute according to its billing documentation. A Figment M-series Mac starts at $95/month, which buys 1,532 GitHub macOS minutes (95 ÷ 0.062) before the per-minute platform is more expensive. For a 10-minute average build, that is 153 builds a month. Teams opening several pull requests a day cross that line quickly. On Bitrise, whose M4 Medium rate is $0.0072/min per its pricing page, the break-even moves to 13,194 minutes — about 1,319 ten-minute builds — so Bitrise usually stays cheaper until you run very high volume. The decision turns on your real rate and your real build minutes, not a marketing figure.
Figment's $95/month M-series tier is an entry price; exact chip, RAM and disk are confirmed when you request the configuration. A separate $29/month virtual Intel macOS VM (2 vCPU, 8 GiB, 80 GiB) can run compatible Intel Xcode 26-or-earlier toolchains for cross-compiling and signing, but ARM-only execution, Xcode 27 and GPU work need the M-series tier.
Three inputs drive the bill:
Monthly cost = builds per month × average build duration (minutes) × rate per minute.
The table compares GitHub Actions ($0.062/min) and Bitrise M4 Medium ($0.0072/min) against a Figment M-series Mac from $95/month and the Managed Build Mac at $249/month. A * flags rows where the monthly Mac beats the per-minute option.
| Builds/mo | Avg min | GitHub Actions | Bitrise M4 Med | Figment M-series $95 | Managed Build $249 |
|---|---|---|---|---|---|
| 50 | 10 | $31.00 | $3.60 | $95 | $249 |
| 100 | 10 | $62.00 | $7.20 | $95 | $249 |
| 153 | 10 | $94.86 (≈break-even) | $11.02 | $95 | $249 |
| 200 | 10 | $124.00 * | $14.40 | $95 * | $249 |
| 300 | 10 | $186.00 * | $21.60 | $95 * | $249 |
| 500 | 10 | $310.00 * | $36.00 | $95 * | $249 * |
| 50 | 20 | $62.00 | $7.20 | $95 | $249 |
| 100 | 20 | $124.00 * | $14.40 | $95 * | $249 |
| 200 | 20 | $248.00 * | $28.80 | $95 * | $249 * |
| 400 | 20 | $496.00 * | $57.60 | $95 * | $249 * |
| 1,320 | 10 | $818.40 * | $95.04 (≈Bitrise break-even) | $95 | $249 |
Reading the worksheet. At 200 ten-minute builds a month, GitHub Actions is $124 versus $95 for the Figment M-series entry — $29/month, $348/year. At 300 builds, the gap is $91/month or $1,092/year. Bitrise's break-even sits near 1,320 ten-minute builds because its per-minute rate is roughly 8× cheaper than GitHub's.
What the worksheet intentionally does not include:
Estimates are unreliable. Time a clean build on the actual target machine, using your own project's scheme and workspace, then plug the average into the worksheet:
#!/usr/bin/env bash
# Time a clean build of YOUR project. Replace the scheme/workspace with yours.
# Requires Xcode installed locally. This is an example, not a benchmark.
set -euo pipefail
SCHEME="${SCHEME:?set SCHEME to the project scheme}"
WORKSPACE="${WORKSPACE:?set WORKSPACE to your .xcworkspace path}"
DESTINATION="${DESTINATION:-generic/platform=iOS}"
DERIVED_DATA="$(mktemp -d -t figment-build-timing)"
trap 'rm -rf "$DERIVED_DATA"' EXIT
echo "Using fresh DerivedData for this timing run."
echo "Build start: $(date -u +%FT%TZ)"
/usr/bin/time -p xcodebuild \
-workspace "$WORKSPACE" \
-scheme "$SCHEME" \
-destination "$DESTINATION" \
-configuration Release \
-derivedDataPath "$DERIVED_DATA" \
clean build
echo "Build end: $(date -u +%FT%TZ)"
Run it three times from a cold DerivedData, average the wall-clock real output and only count successful runs. A build that exits non-zero at minute two is a broken build, not a two-minute build. Confirm your installed flags with xcodebuild -help on the same machine; the available destinations and export methods depend on your Xcode version.
DerivedData, SwiftPM, CocoaPods, Homebrew and Fastlane state persist between builds. Measure on your codebase; cache benefit varies by module structure.Tradeoffs are real: you pay the same rate on a quiet sprint, and you own patching, disk management and Xcode updates on the unmanaged plan. The Managed Build Mac shifts the setup and monitoring work to Figment.
If traffic is uneven — a release sprint followed by a quiet fortnight — keep per-minute macOS runners for burst overflow and run the steady base load on the Figment Mac. Register both in your CI service and label the self-hosted runner so routine PR jobs route to it while release matrix jobs can still fan out to the hosted pool.
real values.real times and failure rate to the per-minute baseline.Start at Figment → · Mac hosting overview
Related reading: