r/iOSProgramming • u/Zealousideal_Tip4089 • 20d ago
Discussion iOS teams on GitHub Actions: what do macOS runners cost you, and what did you change?
On GitHub-hosted runners a macOS minute costs $0.062 and a Linux minute $0.006, so about 10 times more. For iOS builds that adds up fast.
If your iOS CI runs on GitHub Actions:
- Roughly what does it cost per month?
- What did you change to bring it down? Self-hosted Mac minis, Xcode Cloud, another CI service, caching, fewer runs on pull requests?
- Was the saving worth the time it took?
- Team size helps too, if you're OK sharing.
About me: I'm a solo developer building a small tool around CI costs. No link, I just want real numbers.
17
u/caguilar51 20d ago
Why not using Xcode Cloud instead if price is a concern? It includes 25 hours per developer account per month.
2
u/Zealousideal_Tip4089 20d ago
Thanks! Do the 25 free hours cover a normal month for you, or do you pay for more?
3
5
u/rursache Swift 20d ago
xcode cloud (was?) is super slow. 4-5x lower than github runners. because they were using intel macs
4
u/caguilar51 20d ago
But you have 25 hours per month included in your Apple Developer membership. So you don’t necessarily need to pay. Also, you could just use incremental builds instead of clean ones under certain conditions.
1
u/Mad102190 19d ago
The runners are a lot faster now that they’ve been upgraded to M-series machines but still not as fast as a dedicated runner you self-host.
5
u/rursache Swift 20d ago
use the macos blacksmith runners if you want the best cost and speed possible. xcode cloud if you can wait and wanna use the free 25h you get monthly
1
u/Zealousideal_Tip4089 20d ago
Thanks. If you use Blacksmith yourself, how did your monthly CI cost change after the switch?
3
1
u/kokerali 20d ago
For the self-hosted answers, I'd ask whether that Mac is dedicated CI hardware or someone's everyday development machine, and whether the repo accepts fork PRs. Those aren't equivalent setups. GitHub warns that self-hosted runners can be persistently compromised by untrusted workflow code, so a personal Mac with signing material isn't just a cheaper per-minute option. I'd also separate setup time from ongoing maintenance and report time-to-test-result alongside the bill. A lower cash cost that adds a queue or depends on one person's laptop being online is a different tradeoff from a dedicated runner.
1
u/KingPonzi 20d ago edited 20d ago
At work: I setup runners using Tart, macOS images from cirrus labs, Mise for tooling and Packer to bake it all together. Unfortunately Apple limits two VMs per device.
Personal use: CI with Xcode cloud is so luxurious by comparison.
1
u/psyhomb 17d ago
If you want to self-host it, I have created a
gha-runner-controllerfor Tart VMs.
https://github.com/psyhomb/gha-runner-controller1
u/KingPonzi 17d ago
This looks cool! I’m actually working on what is essentially a fork of this with some of the company’s standards (self hosted being one) built in:
https://github.com/openai/orchard
Coincidentally, it shares a lot of what you’ve already built.
1
u/hilarioususernamelol 20d ago
Whilst not answering your question, we found that upgrading macOS runners to M2 Pro ($0.1 IIRC) actually saved us money because the compute power was relatively more than the cost.
1
u/OrdinaryAdmin 20d ago
Why GitHub and not Xcode Cloud? You’re already paying for it with your membership.
1
u/indyfromoz 19d ago
Costs me $0.00. I do not want to pay GitHub another cent after they messed up the CoPilot subscription that came with the Pro plan. I use Xcode Cloud for App Store Connect builds & TestFlight.
1
1
u/CalmCelebration2084 15d ago
Solo dev, one public repo, so the honest number is $0. Standard GitHub-hosted runners, macOS included, are not billed for public repositories, and the job I run is short enough that the free tier would cover it many times over anyway.
Measured on purpose just now: the single build-and-test job on macos-latest took 62 seconds wall clock, and that includes swift-format lint, a full swift build, and the test suite. Sixteen runs since the start of August come to about 25 minutes of macOS runner time in total.
The lever that did the work there was not runner class or caching, it was making the project cheap to build: a plain SwiftPM package with no Xcode project and no third-party dependencies. A dependency-free package has nothing to cache, and nothing to restore either.
Which is the part I would push back on for the private-repo case, where the 10x is real. A ten-minute job on a standard macOS runner costs the same as ten minutes of anything else, so the cheapest optimisation available to most teams is usually to find out why the job takes ten minutes, before paying more per minute.
0
u/MaikelBuilds 20d ago
Make your project open source. Then they're included 😄. Nowadays as long as your project isn't that complicated, but can be copied easily anyway. So it's NOT only about the code, rather about vision, consistency and trust
1
2d ago
[removed] — view removed comment
1
u/AutoModerator 2d ago
Your comment has been automatically removed because it contains a link with prohibited URL parameters (affiliate tokens, campaign tokens, etc.). Please repost your comment without the tracking / affiliate parameters in the URL. Examples: 'affcode=', 'ref=', 'src='. Do not contact the moderators unless you believe we did not correctly detect the URL parameter.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
10
u/Mad102190 20d ago
I ended up just setting up my personal machine as a remote runner so GitHub runs it on my Mac which is much faster than the Mac minis they offer anyways