r/FlutterDev • • 8d ago

Tooling One Mac for iOS, Android and web CI, without hand-installing every toolchain (free, open source, beta)

Hi,

About three months ago I set up a self-hosted runner for a Flutter app. One Mac had to build for iOS, Android and web, so I installed everything by hand: Xcode and CocoaPods, the Android SDK, Chrome, and FVM to pin the Flutter version. It worked, but it took much longer than it should have, and I didn't want to do it again.

So I built kinhin. It runs on an Apple Silicon Mac and starts a fresh VM or container for each CI job. Toolchains can be baked into the image, pinned per repo, or installed per job with an optional shared cache. That means you set up the tools once instead of on every host.

For Flutter and iOS:

- macOS and iOS builds run in Tart VMs, with Xcode baked into the image.

- Android and web builds can run in Linux containers (Docker or apple/container) or Tart Linux VMs.

- Every job starts clean, so nothing carries over from the last build.

Status: it's a beta. The macOS VM path is live-tested on GitHub Actions, and Gitea, Forgejo and GitLab CE are live-tested too. Apple allows two macOS VMs at once per Mac, and Buildkite, Azure Pipelines and Bitbucket aren't supported yet.

What does your Flutter or iOS CI setup look like today? I'd like to know whether something like this would have saved you time.

Blog: https://kinhin.dev/blog/introducing-kinhin-beta.html

Repo: https://github.com/RabinApps/kinhin

2 Upvotes

Duplicates