Whether you build with Swift, Kotlin, Flutter or React Native, mobile CI cost comes down to one fact: iOS builds need macOS, and macOS build minutes are the most expensive minutes in CI. Android builds, tests and lint run happily on cheap Linux machines. The iOS build is what drives the bill.
This post compares the four general-purpose services mobile teams use most: Codemagic, Bitrise, GitHub Actions and Azure Pipelines. It also covers two stack-specific options: Xcode Cloud (Apple platforms) and Expo EAS Build (React Native). You get the free tiers, the prices, and what the same workload costs on each, with charts.
All prices are taken from each vendor's official pricing page on October 27, 2026, in USD. CI pricing changes often, so check the links at the end before you commit.
TL;DR
| If you... | Pick |
|---|---|
| Build an Android-only app | GitHub Actions or Azure Pipelines: Linux minutes are cheap and the free tier often covers everything |
| Build a native iOS app and want zero setup cost | Xcode Cloud (25 free compute hours/month with the Apple Developer Program) |
| Use Expo / React Native and want builds without touching Xcode | Expo EAS Build |
| Are a solo developer on any stack and want the least setup | Codemagic (500 free macOS minutes/month) |
| Keep code on GitHub and want one place for everything | GitHub Actions |
| Run many mobile apps and want a large step library plus release tooling | Bitrise |
| Want the lowest fixed monthly cost, or already use Azure DevOps | Azure Pipelines |
| Own a Mac that can stay on | A self-hosted agent on GitHub Actions or Azure Pipelines |
What your stack needs from CI
| Stack | Android build | iOS build | Notes |
|---|---|---|---|
| Native Android (Kotlin/Java) | Linux | — | No Mac needed at all. The cheapest case. |
| Native iOS (Swift/Obj-C) | — | macOS | Xcode Cloud is an extra option. |
| Flutter | Linux | macOS | One codebase, two builds. |
| React Native | Linux | macOS | Expo projects can also use EAS Build. |
| Kotlin Multiplatform, .NET MAUI, Ionic/Capacitor | Linux | macOS | Same split as Flutter and React Native. |
All four general-purpose services can build every stack in this table. The difference is how much you configure yourself: Codemagic and Bitrise ship ready-made steps for the common mobile stacks, while GitHub Actions and Azure Pipelines give you a machine and you script the build.
Quick comparison
| Codemagic | Bitrise | GitHub Actions | Azure Pipelines | |
|---|---|---|---|---|
| Free tier | 500 macOS M2 min/month (individuals) | Hobby: 300 credits/month, 1 private app | 2,000 min/month (Free plan, private repos) | 1 hosted job with 1,800 min/month + 1 self-hosted job, unlimited minutes |
| Pricing model | Per minute, or fixed yearly | Monthly plan (+ per-minute machine rates) | Per minute | Per parallel job (unlimited minutes) |
| macOS price | $0.095/min (M2), $0.114/min (M4) | Plan-based | $0.062/min (3–4 core) | Included in $40/month per job |
| Linux price | $0.045/min | Plan-based | $0.006/min (2-core) | Included in $40/month per job |
| Mobile setup | Mobile-only CI; workflow UI or codemagic.yaml |
Mobile-only CI; ready-made steps | Generic CI; community actions + your own scripts | Generic CI; Marketplace tasks + your own scripts |
| Automatic iOS signing | Yes | Yes | No (DIY / fastlane) | No (DIY / fastlane) |
| Self-hosted option | No (cloud only) | No (cloud only) | Yes, no GitHub charge | Yes, 1 job free, then $15/job/month |
| Max build time | 120 min | 90 min (Hobby), 210 min (paid) | — | — |
Codemagic
Codemagic is a CI built only for mobile apps. It started with Flutter, and now also builds React Native, native iOS, native Android, Ionic and other stacks. You can set up a workflow in the web UI without writing YAML, or keep it in codemagic.yaml in the repo. iOS code signing can be handled for you with an App Store Connect API key, and publishing to TestFlight / App Store and Google Play is built in.
Pricing:
- Free (individuals): 500 macOS M2 minutes/month, 1 concurrent build, 120-minute build limit.
- Pay as you go: Mac mini M2 $0.095/min, M4 $0.114/min, Linux and Windows $0.045/min. Extra concurrency is $49/month each.
- Fixed price: from $3,990/year (M2, unlimited minutes, 3 concurrent builds).
Good: least setup, generous free tier, iOS signing that just works. Watch out: the highest per-minute macOS price of the four, and Linux is 7× GitHub's price, so Android-only teams pay more than they need to. The fixed plan (~$333/month) only pays off at around 3,500 M2 minutes per month.
Bitrise
Bitrise is a CI built for mobile apps. Its step library covers native iOS (Xcode Archive, CocoaPods, SPM), native Android (Gradle), Flutter, React Native and more, plus steps for code signing and deploying to TestFlight and Google Play. It also sells Release Management and CodePush as separate products.
Pricing:
- Hobby (free): 300 credits/month, 1 private app, 90-minute build limit.
- Starter: $89/month billed yearly ($99 monthly). Recommended for up to 100 builds/month, up to 3 private apps, 4 concurrent builds.
- Pro: from $200/month billed yearly, 250–2,000 builds/month, unlimited private apps.
Good: a flat monthly price that is easy to budget; strong mobile tooling for every stack. Watch out: plans are sized by number of builds and number of apps. If you build Android and iOS as separate builds, 100 releases count as 200 builds, which pushes you from Starter to Pro.
GitHub Actions
If your code is already on GitHub, Actions is the default choice: no extra account, and pull request checks, releases and secrets all live in one place. Run Android on Linux and iOS on macOS as two jobs, so you only pay macOS prices for the part that needs it:
jobs:
android:
runs-on: ubuntu-latest # cheap: $0.006/min
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with: { distribution: temurin, java-version: 17 }
# Native / React Native: ./gradlew bundleRelease (in android/ for RN)
# Flutter: flutter build appbundle (after subosito/flutter-action)
- run: ./gradlew bundleRelease
ios:
runs-on: macos-latest # expensive: $0.062/min
steps:
- uses: actions/checkout@v4
# Native / React Native: fastlane gym, or xcodebuild archive
# Flutter: flutter build ipa
- run: bundle exec fastlane ios releasePricing (private repositories):
- Included minutes: 2,000/month on Free, 3,000 on Pro/Team.
- Beyond that: Linux 2-core $0.006/min, Windows $0.010/min, macOS 3–4 core $0.062/min, macOS M2 Pro (5-core) $0.102/min.
- Public repositories: standard runners are free.
- Self-hosted runners: GitHub's billing docs currently say usage on self-hosted runners is free. GitHub announced a $0.002/min platform charge for self-hosted runners in December 2025, then postponed it, so keep an eye on it.
Good: the cheapest pay-per-minute prices on both Linux and macOS; huge ecosystem.
Watch out: you write and maintain the iOS signing setup yourself (certificates, provisioning profiles, keychain), usually with fastlane match. Also, macOS minutes use up the included allowance much faster than Linux minutes.
Azure Pipelines
Azure Pipelines charges per parallel job, not per minute. A paid Microsoft-hosted job costs $40/month with unlimited minutes, on Linux, Windows or macOS. For a team with steady builds, that is usually the lowest bill of the four. Built-in tasks cover Gradle and Xcode, and Marketplace extensions add App Store and Google Play publishing, so native, Flutter and React Native projects all work.
Pricing:
- Free: 1 Microsoft-hosted parallel job with 1,800 minutes/month, plus 1 self-hosted parallel job with unlimited minutes.
- Extra Microsoft-hosted job: $40/month, unlimited minutes.
- Extra self-hosted job: $15/month.
Good: a fixed, predictable price; the free self-hosted job is ideal if you own a Mac; works well with the rest of Azure DevOps (Boards, Repos, Artifacts). Watch out: Microsoft-hosted macOS agents can be slower to start than the dedicated mobile CIs. New organizations may have to request the free hosted job before their first pipeline can run. The Classic editor and YAML options can also be confusing at first.
I have used Azure Pipelines for mobile projects for years. If you go this way, these posts cover the parts that usually go wrong:
- Azure Pipelines all in one
- How to create an Apple App Store connection in Azure Pipelines
- Setting up a self-hosted Windows agent for Flutter Desktop: 10 errors and fixes
Stack-specific options
Xcode Cloud (native iOS, and other Apple platforms)
Apple's own CI, built into Xcode and App Store Connect. Signing and TestFlight upload need almost no setup.
- 25 compute hours/month free with the Apple Developer Program ($99/year).
- Paid: $49.99/month for 100 hours, $99.99 for 250 hours, $399.99 for 1,000 hours.
- It only builds Apple platforms. Your Android build needs another CI. Flutter and React Native projects can run on it, but only with custom scripts (
ci_scripts/ci_post_clone.sh) that install the SDK and dependencies.
Expo EAS Build (React Native / Expo)
Expo's cloud build service. It handles native builds and iOS credentials for Expo and bare React Native projects, so you never open Xcode. It charges per build, not per minute:
- Free: up to 15 Android and 15 iOS builds/month, low-priority queue.
- Starter: $19/month including $45 of build credit. Production: $199/month including $225.
- Per build (medium worker): Android $1, iOS $2. Large workers cost double.
Real cost: the same workload on each service
Workload A — an app on both stores (React Native, Flutter, or separate native apps). 100 pipeline runs per month, each building:
- iOS on macOS: 15 minutes
- Android on Linux: 10 minutes
That is 1,500 macOS minutes + 1,000 Linux minutes per month. List prices, before free minutes.
Workload B — Android only (native Android, or the Android half of a cross-platform app). 100 builds × 10 minutes = 1,000 Linux minutes per month. Here the free tiers matter, so this chart is after free minutes.
Workload C — native iOS only. 100 builds × 15 minutes = 1,500 macOS minutes (25 hours) per month. List prices.
What the charts do not show:
- Speed is money too. A faster Apple Silicon machine that finishes in 8 minutes instead of 15 changes the per-minute math. Codemagic and Bitrise both offer M4 machines.
- Concurrency. The $40 Azure job runs one build at a time. If iOS and Android must run in parallel, you need a second job (the free 1,800 minutes may be enough for Android).
- Your time. Codemagic, Bitrise, Xcode Cloud and EAS handle iOS signing for you. On GitHub Actions and Azure Pipelines, the first working signing setup can take a day.
Hidden costs to plan for
- Apple Developer Program: $99/year for any iOS app, on every option.
- A Mac for self-hosted agents: a Mac mini pays for itself quickly if you build daily, but you are now the one running OS updates, Xcode upgrades and disk cleanup.
- Build time limits: Codemagic stops builds at 120 minutes, Bitrise Hobby at 90. Large apps with many native dependencies can get close.
- Cache: Gradle, CocoaPods / SPM, npm and pub caches can cut build time in half. Check how much cache each plan includes (for example Codemagic Free: 3 GB per build).
How to choose
- Native Android → GitHub Actions or Azure Pipelines. Linux minutes are cheap and the free tier usually covers a small team.
- Native iOS → start with Xcode Cloud's free 25 hours. Move to GitHub Actions or a self-hosted Mac when you outgrow it.
- React Native with Expo → EAS Build for the least work; move the builds to GitHub Actions or Azure Pipelines when the per-build bill grows.
- Flutter or any cross-platform stack, solo developer → Codemagic Free. 500 macOS minutes is about 30 iOS builds per month, with almost no setup.
- Code on GitHub, small team → GitHub Actions. Cheapest pay-per-minute prices, and the whole workflow stays in the repo.
- Agency or team with several apps → Bitrise. Flat pricing per plan and a strong mobile step library.
- Steady builds every day / already on Azure DevOps → Azure Pipelines. $40/month for unlimited hosted minutes is hard to beat.
- You own a Mac → a self-hosted agent on Azure Pipelines (1 job free) or GitHub Actions brings CI fees close to zero.
Conclusion
On every stack, the mobile CI bill is mostly the macOS bill. Android-only apps can often build for free. For iOS, Xcode Cloud's free hours, GitHub Actions' per-minute price and Azure Pipelines' unlimited-minute job are the cheapest routes. Codemagic, Bitrise and EAS cost more, but you get back the hours you would spend on iOS signing and pipeline upkeep. Run your own numbers with the formula above (macOS minutes × price + Linux minutes × price) before you choose.
Official pricing pages (checked October 27, 2026):