
The student-hardware problem in a macOS development course has a direct fix: rent the Macs on Figment and have each student connect to their own isolated environment. You provision identical tool sets before the first lecture, confirm parity, hand out credentials, and reset the fleet between cohorts. No student has to buy Apple hardware.
Figment's $29 plan is a virtual Intel macOS environment (2 vCPU, 8 GiB RAM, 80 GiB disk) with no GPU acceleration and no audio; access is via the in-browser console, so students use a web browser rather than a desktop VNC client. It runs supported Intel macOS toolchains, including Xcode 26 or earlier, and can cross-compile and sign arm64 device archives and Universal macOS binaries. Executing ARM-only binaries natively, running Xcode 27, and building visionOS targets require an Apple-silicon Mac — see Apple's porting guidance which states developers should use Xcode 26 or earlier on Intel.
| Course goal | Plan | Monthly per seat | Access |
|---|---|---|---|
| Swift/CLI basics, Intel Xcode 26 toolchain, simulator work supported on Intel | Virtual Intel macOS | $29 | Browser console |
| iOS/macOS course needing Screen Sharing/VNC or Apple Remote Desktop monitoring | i3 Mac (physical) | $49 | VNC/Screen Sharing (request-based) |
| Xcode 27, Apple-silicon-only execution, visionOS, GPU-accelerated tools | M-series Mac | from $95 | VNC/Screen Sharing (request-based) |
Physical i3 and M-series inventory is currently request-based; the i3 $49 tier and the M-series from $95 collect requests until supply is confirmed. The specific M-series chip, RAM and disk at the $95 entry price are confirmed in the quote — do not assume a particular M4/16 GB configuration. Start a fleet request at /mac-hosting/start.
Xcode itself is not pre-installed. Students sign in with their own Apple ID and download Xcode from the Mac App Store or Apple Developer portal; the Apple Developer Program agreement governs any device-signing work they do during the course.
A 12-week term at monthly retail, before any quote-stage adjustment:
A shared-host alternative (one physical M-series Mac with 20 student accounts on it) is cheaper on paper but is not recommended for live instruction: 20 concurrent Xcode users on one machine saturate CPU, RAM and disk, and Apple's licence terms restrict multi-user commercial reuse. Per-seat rentals keep each student's environment isolated and independently resettable. Request the plan that matches your syllabus at /mac-hosting/start.
Run the bootstrap below as an administrator on each student Mac before handing the account over. Create the student account first in System Settings > Users & Groups as a Standard user — Apple's guide notes that "Standard users are set up by an administrator. Standard users can install apps and change their own settings, but can't add other users or change other users' settings" (Apple — Set up users, guests, and groups).
#!/bin/bash
# mac-dev-bootstrap.sh — run as admin before handing the account to the student.
set -euo pipefail
COURSE_NODE_VERSION="20"
COURSE_PYTHON_VERSION="3.12"
if ! command -v brew >/dev/null 2>&1; then
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
brew install git "node@${COURSE_NODE_VERSION}" "python@${COURSE_PYTHON_VERSION}" swiftformat
brew link --force --overwrite "node@${COURSE_NODE_VERSION}"
if xcode-select -p >/dev/null 2>&1; then
sudo xcodebuild -license accept 2>/dev/null || true
fi
REPORT="/Users/Shared/env-parity.txt"
{
echo "=== Environment Parity Report ==="
echo "Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
sw_vers
echo "Xcode CLT: $(xcode-select -p 2>/dev/null || echo 'not installed')"
echo "Git: $(git --version)"
echo "Node: $(node --version)"
echo "Python: $(python3 --version)"
echo "swiftformat: $(swiftformat --version)"
} > "${REPORT}"
echo "Bootstrap done. Parity report at ${REPORT}."
This is an example script, not a measured benchmark. Run it on a single seat first, read the resulting /Users/Shared/env-parity.txt, then roll it out. Compare the reports from every seat — they should match line-for-line except for the timestamp. If a version drifts, re-run brew upgrade <package> on that outlier.
| Item | Check command | Expected |
|---|---|---|
| macOS build | sw_vers -productVersion | Identical across seats |
| Xcode CLT path | xcode-select -p | /Library/Developer/CommandLineTools |
| Xcode license | xcodebuild -license check | Accepted |
| Git | git --version | Match |
| Node | node --version | v20.x match |
| Python | python3 --version | 3.12.x match |
| swiftformat | swiftformat --version | Match |
Paste each seat's parity report into a shared spreadsheet and sort — mismatches become obvious at a glance.
Each student needs three things: the Mac's hostname (or browser-console URL for the $29 VM), their username, and their session password. Split the delivery so a single intercepted email can't hand over full access.
Host:
mac-student-07.figment.example· Username:student07
Session password (link expires in 48 hours)
Rotate passwords between cohorts and confirm in the first five minutes of class that every student has a working session before you start teaching.
For physical i3 or M-series seats on a shared private network, Apple Remote Desktop (ARD) lets one instructor observe many student Macs at once. Apple's Remote Desktop User Guide documents a Multi-client observe window, Send UNIX Command, Lock Screen, and Copy Items — the four actions that matter most in a live lab:
ARD requires Screen Sharing/Remote Management enabled on each student Mac and network reachability from the instructor Mac. Confirm with your Figment quote whether your fleet sits on a shared private LAN or whether each seat needs an individual connection. ARD is a paid Apple app; buy it from the Mac App Store on the instructor's Mac. The $29 virtual Intel macOS seats are browser-console only, so ARD-style tiled observation applies to the physical i3/M-series tiers.
#!/bin/bash
# mac-dev-reset.sh — run as admin on a single Mac. Review before running.
set -euo pipefail
# Student accounts in this example were created with UIDs 1001-1099.
# Run `dscl . -list /Users UniqueID` and adjust the range to match your setup.
for username in $(dscl . -list /Users UniqueID | awk '$2 >= 1001 && $2 <= 1099 {print $1}'); do
echo "Removing user: ${username}"
sudo dscl . -delete "/Users/${username}"
sudo rm -rf "/Users/${username}"
done
echo "Reset complete. Re-run mac-dev-bootstrap.sh and create fresh accounts."
Run this script per seat, not centrally, and inspect dscl . -list /Users UniqueID first — the UID range depends on how you created the accounts. Then re-run mac-dev-bootstrap.sh, create fresh Standard users, and generate new session passwords for the incoming cohort.
Ready to provision a class? Start your fleet request at /mac-hosting/start.