
The quickest answer: start on the $29 virtual Intel macOS plan if your Xcode work is xcodebuild, Swift Package Manager, signing, archiving, and uploads to App Store Connect, plus iOS simulator unit tests. Move to an M-series plan from $95/month when you need native arm64 execution, Metal GPU work, the visionOS simulator, or Xcode 27 — which, per Apple, requires Apple silicon: Intel Macs must use Xcode 26 or an earlier release (porting guide). The $95 price is the M-series entry point; exact chip, RAM and disk are confirmed in your configuration quote.
Figment's entry plan is a virtual Intel macOS environment running on Linux/KVM with 2 vCPU, 8 GiB RAM and 80 GiB disk. It is a real macOS runtime: you log in through the browser console and run xcodebuild, swift build, codesign, xcrun notarytool, package managers, and your CI agent from the desktop terminal. There is no GPU acceleration, no audio subsystem, no USB passthrough, and the architecture is x86_64 — so arm64-only binaries will not execute natively on it. Inbound public SSH is not implemented today; outbound connections from a CI agent to your GitHub, GitLab or App Store Connect account work normally.
Because the CPU is Intel, Xcode 26 installs and runs: Apple states "Xcode 26 requires a Mac running macOS Sequoia 15.6 or later." Later 26.x point releases can raise the minimum macOS — check the exact Xcode/macOS pair in the release notes index before you pick a version. Intel Xcode 26 can also cross-compile arm64 and universal binaries; it just cannot execute the arm64 slice locally. Xcode 27 is arm64-only and will not install on Intel. The VM is being provisioned with macOS Sequoia; confirm the installed OS when you request the plan.
Physical M-series Macs start at $95/month. They run current Xcode (including Xcode 27), execute arm64 code natively, expose the Metal GPU, and host the arm64 iOS and visionOS simulators. The Managed Build Mac at $249/month adds CI setup, backups, monitoring, and 30 minutes of monthly support on one M-series Mac. The Managed Mac Team at $999/month covers two M-series Macs and two CI runners with one hour of monthly support — useful when two developers need isolated signing environments.
Physical plans currently collect requests until supply is confirmed. Exact chip generation, RAM and disk are agreed in the quote; $95 is the entry price, not a fixed spec. Confirm the configuration before you commit.
"Works" means the task runs reliably on the tier. "Limited" means it runs with caveats. "Blocked" means it cannot complete.
| Task | Intel VM ($29) | M-series (from $95) |
|---|---|---|
swift build / xcodebuild from CLI | Works | Works |
| Swift Package Manager resolve + build | Works | Works |
| iOS simulator unit tests (software renderer) | Works, Limited for GPU-heavy UI | Works |
| Code-sign and archive an iOS app | Works | Works |
Upload IPA via Transporter or xcrun altool/xcodebuild -exportArchive | Works | Works |
Notarize a macOS build with xcrun notarytool | Works (macOS only; not for iOS TestFlight) | Works |
| GitHub Actions self-hosted runner | Works | Works |
| macOS CLI tool (Intel target) | Works | Works |
| Cross-compile a universal (x86_64 + arm64) macOS binary | Works (compiled, not executed locally) | Works (compile and run both slices) |
| SwiftUI Previews in Xcode GUI over VNC | Limited (no GPU; previews that rely on Metal may fail) | Works |
| Attach a physical iPhone/iPad for on-device debug | Blocked (no USB passthrough) | Depends on host USB access; ask in the quote |
| Execute an arm64 binary / arm64 simulator runtime | Blocked | Works |
| Metal GPU compute, shader runtime, Instruments GPU trace | Blocked | Works |
| visionOS simulator | Blocked (Apple silicon only) | Works |
| Xcode 27 install and builds | Blocked (arm64-only installer) | Works |
macOS Tahoe is not synonymous with "Apple silicon only": Apple support 122867 lists 2019/2020 MacBook Pro, iMac 2020 and Mac Pro 2019 among supported Intel models. The $29 VM today is Sequoia, so any 26.x release whose minimum is Tahoe would not install until the VM image is updated.
A typical iOS CI job is xcodebuild plus signing plus upload. All three are CPU/network work, not GPU work. A pipeline like this runs cleanly on the Intel VM:
#!/usr/bin/env bash
set -euo pipefail
WORKSPACE="MyApp.xcworkspace"
SCHEME="MyApp" # replace with a scheme that exists in your project
DEST='platform=iOS Simulator,name=iPhone 16,OS=latest'
xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" \
-destination "$DEST" -configuration Release \
clean build test | tee build.log
This is illustrative, not a benchmark. Replace SCHEME with one that exists in your project and confirm the simulator runtime on the installed Xcode with xcrun simctl list runtimes. A failed xcodebuild call will exit non-zero because of set -e; do not treat a failed run as a successful build.
For signing and distribution: keep certificates and provisioning profiles in your CI secret manager. Export the signing identity as an encrypted .p12 (certificate plus private key) and load it into a unique, per-run keychain that you add to the search list and remove in a trap on exit. Provisioning profiles are files — copy them to ~/Library/MobileDevice/Provisioning Profiles/, don't import them into a keychain. Update your own firewall and artifact-store allowlists if needed; Apple does not publish a TestFlight ingress allowlist to copy.
Three categories genuinely require Apple silicon:
Device-attached debugging also needs a host that can expose USB; confirm USB availability in the M-series quote if that is a requirement.
Compare the two tiers against the specific blocker in your pipeline.
If exactly one engineer needs occasional Metal profiling, an M-series slot for that engineer plus the $29 VM for the main CI runner is usually cheaper than putting the whole team on M-series. If every PR must pass arm64 tests, the $95 plan is the floor and the Managed Build Mac saves the hours you would otherwise spend wiring up the runner yourself.
Run this short check on whatever plan you receive so there are no surprises:
#!/usr/bin/env bash
set -euo pipefail
echo "=== Architecture ==="
uname -m # x86_64 on the Intel VM, arm64 on M-series
sysctl -n machdep.cpu.brand_string || true
echo "=== macOS / Xcode ==="
sw_vers
xcodebuild -version
echo "=== Simulators ==="
xcrun simctl list runtimes
echo "=== GPU / Metal ==="
system_profiler SPDisplaysDataType | grep -E "Chipset Model|Metal" || echo "No GPU reported"
uname -m tells you the tier instantly. The GPU section prints nothing meaningful on the Intel VM, which is the expected signal that Metal-dependent work belongs on M-series.
Match your blocking task to the matrix above, then request the plan that clears it.
Related guides: