Figment.so
Mac hostingWebsite hostingGuidesHow to usePricing

Profile iOS Apps with Instruments on a Rented Mac

Instruments runs only on macOS, so if you are on Windows, Linux, or a Mac that cannot run a current Xcode, a rented Mac is the practical way to record a Time Profiler trace. This guide picks the Figment plan that fits the job, opens Instruments against a simulator, records with xctrace, and exports the .trace file back to your laptop.

Pick the Right Figment Plan for Instruments

Figment's $29/month plan is a virtual Intel macOS environment (2 vCPU, 8 GiB RAM, 80 GiB disk) on Linux/KVM. It runs a compatible Intel Xcode toolchain — Xcode 26 or earlier, per Apple's Porting your macOS apps to Apple silicon — and can profile x86_64 simulator targets that the installed Xcode and macOS support. It has no GPU acceleration and no audio, cannot execute arm64 binaries, and cannot run the visionOS simulator (Apple silicon only). Access is through the browser desktop console; inbound SSH to the VM is not currently offered.

Pick a physical M-series Mac from $95/month when you need arm64 execution, Metal/GPU Instruments, CPU performance-counter templates, or the visionOS simulator. The specific chip generation, RAM and disk are confirmed in the quote, not fixed at $95, and physical plans collect requests until supply is confirmed, so do not plan around same-day delivery. For a packaged option, Managed Build Mac ($249/month) includes one M-series Mac with CI setup, backups, monitoring, and 30 minutes of monthly support. Start a request at /mac-hosting/start.

What Instruments Needs From the Host

Instruments ships inside Xcode and uses host-side tracing and hardware counters, so it must run on the same Mac as the simulator or device. There is no Windows, Linux, or web version. Apple describes the toolset in Improving your app's performance.

For interactive work — scrubbing the timeline, navigating flame graphs, jumping to source — you need a graphical session on the Mac. For scripted recording or CI, the command-line companion xctrace records and exports traces without a display; see the xctrace(1) flag reference.

Connect to the Remote Mac

Figment Intel VM. Open the browser desktop console provided with the plan and launch Instruments or run xctrace from the VM's own Terminal. Everything stays inside the console session.

Figment physical M-series Mac. Confirm the access method with Figment when the machine is delivered. Where macOS Screen Sharing (VNC) is enabled, connect from Finder with ⌘K and vnc://YOUR_MAC_IP, authenticate with the credentials in the quote, and set Quality to Adaptive for slower links. From Windows or Linux, point RealVNC Viewer or TigerVNC at YOUR_MAC_IP:5900.

Instruments' timeline feels sluggish over high-latency links. If scrubbing is painful, record headlessly with xctrace on the Mac's own Terminal and copy the .trace file down for local analysis.

Record a Time Profiler Trace Against a Simulator

  1. In Xcode, boot the target simulator: Window → Devices and Simulators → Start Simulator.
  2. Build and run your app once so dSYM symbols land next to the binary. Instruments uses them to resolve function names.
  3. Open Instruments: Xcode → Open Developer Tool → Instruments (or ⌘⇧I).
  4. In the template picker, choose Time Profiler.
  5. In the trace document header, open the target pop-up and pick your booted simulator (for example, iPhone 16 Pro).
  6. Click Record (⌘R), exercise the slow path for 15–30 seconds, then Stop. Very short clips miss infrequent spikes; long ones produce traces that are slow to scroll remotely.

CPU Counters (cycles, cache misses, branch mispredictions) reads the physical CPU's performance monitoring unit, so run that template on a physical M-series Mac, not the Intel VM.

Read the Call Tree

After recording, the Call Tree pane ranks functions by time consumed. Three toggles make it navigable:

OptionEffect
Invert Call TreeShows leaf functions first — where CPU time was actually spent
Hide System LibrariesHides Swift runtime, Foundation, UIKit so your code rises to the top
Flatten RecursionCollapses recursive cycles into one row

Turn on Invert Call Tree and Hide System Libraries as the default view. Any function consuming more than 5–10% of wall time is a primary optimization candidate. Double-click to jump to the line in Xcode. Enable Separate by Thread for GCD or async/await workloads to isolate runaway queues.

Remote Session Checklist

  • Screen sharing (or browser console) connected; display at least 1440×900 so the Instruments toolbar is not clipped
  • Target simulator booted before launching Instruments; otherwise it defaults to the Mac process picker
  • App built at least once so dSYM files exist on disk
  • Recording kept to 15–30 seconds to avoid multi-gigabyte .trace files
  • At least 2 GB free disk on the remote Mac (a 30-second Time Profiler trace can reach 500 MB)
  • For arm64, Metal/GPU, or visionOS, you are on a physical M-series Mac, not the Intel VM
  • For a public network, the VNC session is tunneled or restricted to allowlisted IPs through your own firewall

Record and Export Headlessly With xctrace

The xctrace example below is an unexecuted template. Substitute your own scheme, app path, and simulator name, and run it inside the Mac's Terminal (browser console on the VM, or a Terminal on the physical Mac):

set -euo pipefail

TRACE_DIR="$HOME/traces"
mkdir -p "$TRACE_DIR"
TRACE_FILE="$TRACE_DIR/session-$(date +%Y%m%d-%H%M%S).trace"

xctrace record \
  --template 'Time Profiler' \
  --device 'iPhone 16 Pro' \
  --time-limit 20s \
  --output "$TRACE_FILE" \
  --no-prompt \
  --launch -- /path/to/YourApp.app

xctrace export \
  --input "$TRACE_FILE" \
  --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' \
  --output "$TRACE_DIR/session.xml"

xctrace record also supports --attach <pid|name> for running processes, --all-processes for system-wide sampling, and --window for ring-buffer mode (see the xctrace man page). To open the .trace on a different Mac, copy the file over whatever transfer the plan exposes — SFTP when included in your physical Mac quote, or an object store you control — and open it with Instruments; no Xcode project is required.

A Worked Cost Comparison

The entry prices below are not equal hardware. Figment's $95 is an unspecified M-series entry; CloudMac's $99.99 is a specific M4 / 16 GB / 256 GB mini.

Line itemFigment M-series entryCloudMac M4 / 16 GB / 256 GB
Headline monthly$95/mo (chip/RAM/disk confirmed in quote)$99.99/mo (cloudmac.org/pricing)
12 months at monthly rate$1,140$1,199.88
Prepaid annualNot published; ask in quote$999/year (cloudmac.org)

Twelve months of Figment at $95 is $1,140; CloudMac's published $999/year prepay is $141 cheaper over a year than paying Figment's $95 headline every month for twelve months, assuming Figment's quote lands at $95 and the CloudMac 256 GB allocation is available (its 512 GB and 1 TB rows show "Fully reserved"). If you need the specific managed CI work — setup, backups, monitoring, support hours — Figment's Managed Build Mac at $249/month bundles that against a single M-series machine; CloudMac's listed plan is unmanaged Mac access. Compare on the actual job, not the headline.

If a regression only appears on a physical device, attach it to the delivered M-series Mac by USB and run xctrace record --device "DEVICE_UDID". The UDID shows up in Xcode → Window → Devices and Simulators.

Request a plan at /mac-hosting or begin at /mac-hosting/start.

Related guides: Manage Provisioning Profiles Without a Local Mac · Swift Package Manager on a Remote Mac · GitHub Actions Self-Hosted Runner on Mac


Subscribe for Figma design and website publishing guides.


Figment.so

Contact

Twitter

Website pricing

Compute index

About

Privacy

Terms