MacOn app icon

Local iOS CI · for macOS

Your Mac is
the CI runner.

MacOn turns the Mac on your desk into a full iOS pipeline — watch a repo, build, test across simulators, and ship to TestFlight. Free, fast, and private.

Requires macOS 14 or later · Bitbucket & GitHub

A CI server, without the server.

Everything a hosted CI does for iOS — running on hardware you already own.

Your Mac, your runner

No metered build minutes, no queue, no cloud VM spin-up. Warm caches make it the fastest CI for a single dev.

Bitbucket & GitHub

Watch a branch or open PRs. Poll on a timer, or receive webhooks for instant, push-based builds.

macon.yml pipelines

Bitrise-style workflows: before_run chains, triggers, env, run_if, and always-run steps — defined in your repo.

Test matrix

Fan a step out across device × OS combinations. UI-test on every simulator that matters, in one push.

Ship to TestFlight

fastlane with automatic signing and App Store Connect API keys. Merge to main, upload a build — done.

Always-on service

Install as a launchd service that starts at login and restarts on crash — ideal for a dedicated or EC2 Mac.

Homebrew

Install the CLI.

One tap, one install. Then bootstrap the toolchain and start watching.

1 · Tap & install

# add the tap, then install brew tap alimusawa313/macon https://github.com/alimusawa313/homebrew-macon brew install macon

2 · Check the machine

macon init # installs missing tools macon sims list # iOS / watchOS / tvOS / visionOS

3 · Watch & build

# poll a branch and build every commit macon watch --workspace acme --repo app --branch main # or GitHub, instant, via webhook macon watch --provider github --workspace org \ --repo app --webhook --port 8787

4 · Run it unattended

# export from the app, run headless as a service macon service install --config macon-export.json

macon.yml

Pipelines that live in your repo.

Composable workflows and a test matrix — the same file runs in the app or the CLI.

name: PlanPal iOS CI workflows: _setup: steps: - { name: Gems, script: bundle install } - { name: SwiftLint, script: swiftlint lint --strict } test: before_run: [_setup] steps: - name: UI Tests # fan out across devices × OS matrix: device: ["iPhone 17 Pro", "iPad Air 11-inch (M4)"] os: ["26.4", "26.5"] script: bundle exec fastlane test device:"$MACON_MATRIX_DEVICE" os:"$MACON_MATRIX_OS" beta: before_run: [test] steps: - { name: TestFlight, script: bundle exec fastlane beta } triggers: - { pull_request: "*", workflow: test } - { branch: main, workflow: beta }

Docs & help.

Everything you need to set up, script, and run MacOn.

Quick help — the commands at a glance
# manage the machine macon init [--check] # toolchain doctor + installer macon sims list # installed runtimes & devices macon sims install watchOS 11.2 # add a simulator runtime # run CI macon lint [macon.yml] # validate a pipeline file macon run --workflow beta [dir] # run one workflow once macon watch --config file.json # watch exported pipelines macon service install [args] # run as a launchd service macon help # full usage

Questions & answers.

The things people ask before turning their Mac into CI.

Yes. It runs on hardware you already own, so there are no per-minute build charges — and it's open source.

No. MacOn is additive. A common setup is MacOn for fast PR and test builds, with a hosted CI (or an always-on MacOn service) handling release builds. Your existing Bitrise/Xcode Cloud setup keeps working untouched.

Any Apple platform — iOS, iPadOS, watchOS, tvOS, and visionOS — plus macOS. The first four run on simulators (managed with macon sims); macOS builds run natively.

Both. Watch a branch or open pull requests, and choose polling or instant webhooks — per pipeline.

While it's watching, yes. For unattended use, install it as a launchd service (macon service install) on an always-on machine — even a cloud EC2 Mac — so it starts at login and restarts on crash.

It uses a team-only trust model. Secrets live in the macOS Keychain, never in your repo, and your code is only ever checked out on your own machine.

Yes — MacOn runs your fastlane lanes, so a beta lane with an App Store Connect API key uploads to TestFlight just like it would anywhere else.

macOS 14 or later and Xcode. Run macon init and it checks the rest of the toolchain (fastlane, SwiftLint, simulators…) and installs what's missing.

Turn your Mac into CI.

Free to run, yours to control.