Toepassing · CI/CD en build runners

    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.

    Voorbeeld van de workflow
    1. Repository

      Push of pull request

      01
    2. Dedicated Mac-runner

      Self-hosted agent

      02
    3. Build & test

      xcodebuild, simulators

      03
    4. Artefact

      .ipa, logs, rapporten

      04

    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. 1

      Een ontwikkelaar opent een pull request op GitHub.

    2. 2

      De workflow vraagt om de labels self-hosted, macOS, ARM64 en komt op je vBoxx-Mac terecht.

    3. 3

      xcodebuild haalt packages uit de warme lokale cache, bouwt en draait unit tests.

    4. 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. 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.

    Xcode-build, unittests en UI-testsDraait opMac-runnerWaaromxcodebuild en de iOS Simulator hebben macOS nodig.
    Code signing, notarisatie en upload naar App Store ConnectDraait opMac-runnerWaaromGebruikt de keychain van de runner en Apple-tools zoals notarytool of fastlane.
    Docker-builds, container actions en service containersDraait opLinux-runnerWaaromDocker container actions draaien niet native op een macOS-runner.
    Linting, backendtests en webbuildsDraait opBeideWaaromOp Linux draaien houdt de Mac vrij voor Apple-jobs.

    Inrichten en beheren

    1. 1

      Bestel een Mac en kies de macOS-versie in de configurator

      Je krijgt volledige beheerderstoegang via SSH.

    2. 2

      Installeer Xcode, de command line tools en je toolchain (Homebrew, fastlane, Ruby of Node waar nodig).

    3. 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. 4

      Importeer signing-certificaten in een aparte keychain voor die gebruiker, of haal ze per job op met fastlane match.

    5. 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. 6

      Plan onderhoud

      Ruim oude DerivedData en simulators periodiek op en test nieuwe Xcode-versies eerst op een branch.

    Welke configuratie past

    Prijzen

    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

    Geschikt voor

    Grotere projecten, UI-tests met meerdere simulators of twee zorgvuldig gemeten gelijktijdige jobs.

    Mac mini M6

    • 12-core CPU · 12-core GPU
    • Geheugen: 32 GB
    • Opslag: 512 GB SSD

    Geschikt voor

    Grote monorepo's, meerdere Xcode-versies naast elkaar en grote build-caches.

    Mac mini M5 Pro

    • 15-core CPU · 16-core GPU
    • Geheugen: 48 GB
    • Opslag: 1 TB 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.

    Veelgestelde vragen

    Ja, je kunt beide agents installeren, maar ze delen dan dezelfde CPU en hetzelfde geheugen. De meeste teams houden één agent per Mac zodat buildtijden voorspelbaar blijven.

    Nee. Docker container actions en service containers van GitHub hebben een Linux-runner nodig. Draai die op een Linux-machine en houd de Xcode-jobs op de Mac.

    Gebruik een aparte macOS-gebruiker en keychain voor de runner, beperk wie workflows mag aanpassen en haal certificaten bij voorkeur per job op met een tool als fastlane match in plaats van ze permanent op te slaan.

    Je kunt de Mac hard herstarten via het APC-stroombeheer. Met de optionele JetKVM zie je ook het scherm en herstel je zonder SSH. Richt de runner in als launch service, dan start hij vanzelf weer.

    Ja. Je kunt macOS zelf upgraden of met de optionele JetKVM en virtual media een schone versie installeren. Controleer eerst of je Xcode-versie die ondersteunt.

    Twijfel je welke Mac bij je workload past?

    Stel zelf een Mac mini M6 of M5 Pro samen, of beschrijf je workload en een engineer adviseert een configuratie.