Skip to main content
← Back to Blog

What to check when a GitHub Actions macOS runner feels slow

Check queue wait, cold start, cache misses, then tool installs — in that order.

What to check when a GitHub Actions macOS runner feels slow

When a macOS job in GitHub Actions feels “slow”, wait time, preparation, and re-downloads often dominate more than raw compute. Below is a check order built only from facts in the public docs—no unmeasured speed claims. data_asof: 2026-09-29.

1. Four checks first

  • Queue wait — in the Actions timeline, check how long the job sat before it started.
  • Cold start — a fresh VM and runner registration can add setup time. XenoCI creates a new macOS VM for every job (getting started).
  • Cache miss — re-downloading dependencies or DerivedData can outweigh the compile itself. Data from actions/cache is stored on GitHub.
  • Tool and simulator installs — installing Xcode, runtimes, or packages inside the workflow can dominate the job. Pick Xcode with xcode-select / DEVELOPER_DIR, not the runs-on label (runner images).

2. XenoCI runner facts (shape and pricing)

This page does not publish speed benchmarks. The table below lists only facts checked against the site docs and rates.js. data_asof: 2026-09-29.

FieldValueSource
runs-on labelOnly xenoci-macosGetting started · rates.js
ShapeApple Silicon M4, 4 vCPU · 8 GiBGetting started · home
IsolationFresh macOS VM per job; deleted when the job endsGetting started · FAQ
List price1 credit = 1 M4 minute = KRW 100, per-second, no minimumGetting started · rates.js
Free credits100 credits/month (no rollover; GitHub account ≥ 30 days)Getting started
GitHub-hosted macOS list rate$0.062/min (GitHub public pricing; per-job minute rounding)llms.txt · rates.js compare

On a pure per-minute list price, XenoCI list price KRW 100 is not lower than the GitHub-hosted standard macOS rate ($0.062/min). The differences are no monthly fee, non-expiring prepaid credits, 100 free credits each month, per-second billing, and Apple Silicon M4.

3. Workflow example you can paste

Switch the label to xenoci-macos and keep the cache on GitHub. Change the scheme name to match your project.

name: build
on: [push, workflow_dispatch]

jobs:
  ios:
    runs-on: xenoci-macos
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        with:
          path: |
            ~/Library/Developer/Xcode/DerivedData
            .build
          key: ${{ runner.os }}-ios-${{ hashFiles('**/Package.resolved', '**/Podfile.lock') }}
      - run: xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16' test

4. Read next

For connection steps see GitHub Actions integration, for images and Xcode see runner images overview, and for credits and isolation see getting started and the FAQ.

FAQ

Where does the cache live?

Data uploaded with actions/cache and actions/upload-artifact is stored on GitHub. The XenoCI macOS VM is deleted when the job ends. (Getting started docs, data_asof 2026-09-29)

Do I pick Xcode with the runs-on label?

No. There is one label, xenoci-macos. Choose Xcode inside the workflow with xcode-select or DEVELOPER_DIR. (Runner images docs, data_asof 2026-09-29)

Can jobs share disk or secrets on the host?

Each job gets a fresh macOS VM. When it ends, the VM and the code, secrets, and artifacts inside it are deleted. (FAQ and getting started docs, data_asof 2026-09-29)

Learn more

Check the docs and get started today.