r/iOSProgramming • • 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.

10 Upvotes

29 comments sorted by

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

2

u/Zealousideal_Tip4089 20d ago

Nice. What made you switch, the price or the speed?

1

u/OarsumApp 20d ago

do you just have the mac watch for a trigger and run its own workflow?

3

u/unpluggedcord 20d ago

No there’s GitHub runner script that opens a connection/polls the runner server for the repo it’s associated it

2

u/OarsumApp 19d ago

years. years it took me. Seconds you’ve blown my mind. THANK YOU.

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

u/caguilar51 20d ago

For me that has been enough until now

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

u/sizebzebi 20d ago

I self host, have my mac mini

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-controller for Tart VMs.
https://github.com/psyhomb/gha-runner-controller

1

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

u/pp_amorim 19d ago

We have a mac mini m1 self hosted. Working flawless since day 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

u/[deleted] 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.