Self-hosted macOS build runners voor Xcode-projecten
Voor ontwikkelteams die onbemande, herhaalbare iOS- en macOS-builds nodig hebben. Je registreert een dedicated Mac mini als runner in je CI-systeem en elke push levert een gesigneerde build of testresultaat op, op hardware die niemand anders gebruikt.
- 01
Repository
Push of pull request
- 02
Dedicated Mac-runner
Self-hosted agent
- 03
Build & test
xcodebuild, simulators
- 04
Artefact
.ipa, logs, rapporten
Wat dit oplost
Wachttijd op gedeelde macOS-runners
Gedeelde macOS-runners starten soms traag en worden per minuut gefactureerd. Een dedicated runner staat altijd aan en pakt jobs direct op.
Koude caches bij elke job
Tijdelijke runners starten leeg. Een vaste Mac bewaart DerivedData-, SwiftPM-, CocoaPods- en Homebrew-caches tussen builds.
Grip op Xcode-versies
Jij bepaalt wanneer een nieuwe Xcode- of macOS-versie wordt geïnstalleerd, niet het image-schema van een CI-leverancier.
Voorbeeldworkflow
Van pull request naar TestFlight
- 1
Een ontwikkelaar opent een pull request op GitHub.
- 2
De workflow vraagt om de labels self-hosted, macOS, ARM64 en komt op je vBoxx-Mac terecht.
- 3
xcodebuild haalt packages uit de warme lokale cache, bouwt en draait unit tests.
- 4
Bij een merge naar main signeert fastlane de app met certificaten uit de keychain van de runner en uploadt de build naar App Store Connect.
- 5
Logs en de .ipa worden als artifacts in je CI-systeem opgeslagen.
Wat draait op de Mac, en wat niet
Gebruik de Mac-runner voor stappen die alleen op Apple werken. De rest kan op je bestaande Linux-runners blijven.
| Pipelinestap | Draait op | Waarom |
|---|---|---|
| Xcode-build, unittests en UI-tests | Draait opMac-runner | Waaromxcodebuild en de iOS Simulator hebben macOS nodig. |
| Code signing, notarisatie en upload naar App Store Connect | Draait opMac-runner | WaaromGebruikt de keychain van de runner en Apple-tools zoals notarytool of fastlane. |
| Docker-builds, container actions en service containers | Draait opLinux-runner | WaaromDocker container actions draaien niet native op een macOS-runner. |
| Linting, backendtests en webbuilds | Draait opBeide | WaaromOp Linux draaien houdt de Mac vrij voor Apple-jobs. |
Inrichten en beheren
- 1
Bestel een Mac en kies de macOS-versie in de configurator
Je krijgt volledige beheerderstoegang via SSH.
- 2
Installeer Xcode, de command line tools en je toolchain (Homebrew, fastlane, Ruby of Node waar nodig).
- 3
Maak een aparte macOS-gebruiker zonder beheerdersrechten voor de runner en installeer de GitHub Actions-runner of GitLab Runner (shell executor) als launch service, zodat hij na een herstart weer start.
- 4
Importeer signing-certificaten in een aparte keychain voor die gebruiker, of haal ze per job op met fastlane match.
- 5
Bepaal de gelijktijdigheid
Één runnerproces per Mac is de veiligste standaard voor Xcode-builds. Voeg pas een tweede runner toe als je CPU, geheugen en schijfruimte hebt gemeten.
- 6
Plan onderhoud
Ruim oude DerivedData en simulators periodiek op en test nieuwe Xcode-versies eerst op een branch.
Welke configuratie past
Geschikt voor
Eén runner voor kleine tot middelgrote apps, één build tegelijk.
Mac mini M6
- 12-core CPU · 12-core GPU
- Geheugen: 16 GB
- Opslag: 512 GB SSD
Wie doet wat
vBoxx levert
- Een dedicated Mac mini M6 of M5 Pro die alleen je runner gebruikt, met de macOS-versie die je kiest
- Blijvende SSD-opslag, zodat buildcaches bewaard blijven tussen jobs en na een herstart
- Netwerk: 10 Gigabit Ethernet-poort · 1 Gbit/s onbeperkt · publiek IPv4 + IPv6
- Remote APC-stroombeheer om een vastgelopen runner hard te herstarten, inbegrepen
- Optionele JetKVM-console voor als macOS niet meer via SSH reageert
Jij beheert
- Installeren en bijwerken van Xcode, macOS en de runner-agent
- Runnerregistratie, labels, tokens en gelijktijdigheid
- Signing-certificaten, provisioning profiles en secrets
- Firewallregels, SSH-sleutels en toegang voor je team
- Back-ups van alles wat niet in Git of je CI-systeem staat
Voordat je voor deze opzet kiest
- Self-hosted runners op publieke repositories kunnen code uit geforkte pull requests uitvoeren. Gebruik ze voor private repositories, of vereis goedkeuring voor externe bijdragers.
- Eén Mac is één runnerpool. Heb je veel korte parallelle jobs nodig, steeds op een schone machine, dan past een dienst met tijdelijke runners mogelijk beter.
- Er is geen beheerde CI-dienst en geen automatische Xcode-update inbegrepen. De Mac richt je zelf in.