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/cacheis 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.
| Field | Value | Source |
|---|---|---|
| runs-on label | Only xenoci-macos | Getting started · rates.js |
| Shape | Apple Silicon M4, 4 vCPU · 8 GiB | Getting started · home |
| Isolation | Fresh macOS VM per job; deleted when the job ends | Getting started · FAQ |
| List price | 1 credit = 1 M4 minute = KRW 100, per-second, no minimum | Getting started · rates.js |
| Free credits | 100 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' test4. 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)