
Instruments Profiling
- 1 installs
- 17 repo stars
- Updated July 16, 2026
- blacktop/dotfiles
Instruments-profiling is a skill for profiling native macOS or iOS apps with Instruments and the xctrace CLI.
About
Instruments-profiling helps profile native macOS or iOS apps using Instruments and the xctrace CLI. A developer uses it to record a Time Profiler trace by launching or attaching to a process, then open or export the trace for stack analysis. It covers correct binary selection, CLI arguments, and common gotchas like LaunchServices resolving the wrong bundle.
- Profiles native macOS/iOS apps with Instruments and the xctrace CLI
- Covers Time Profiler recording, launch vs attach, and trace exports
- Documents the wrong-binary LaunchServices gotcha
Instruments Profiling by the numbers
- 1 all-time installs (skills.sh)
- Ranked #489 of 596 Debugging skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
instruments-profiling capabilities & compatibility
- Capabilities
- rust profiling · cpu profiling
- Use cases
- debugging
- Platforms
- macOS
What instruments-profiling says it does
Use when profiling native macOS or iOS apps with Instruments/xctrace.
Instruments may profile the wrong app
Focus: Time Profiler, `xctrace` CLI, and picking the correct binary/app instance.
npx skills add https://github.com/blacktop/dotfiles --skill instruments-profilingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 17 |
| Last updated | July 16, 2026 |
| Repository | blacktop/dotfiles ↗ |
What it does
Record and analyze a Time Profiler trace for a native macOS or iOS app to find performance bottlenecks.
Who is it for?
Performance profiling or stack analysis for native macOS and iOS apps.
When should I use this skill?
The user wants performance profiling or stack analysis for native apps.
What you get
A Time Profiler trace is recorded and opened for stack and performance analysis.
By the numbers
- Records a 60s time-limited Time Profiler trace
Files
Instruments Profiling (macOS/iOS)
Use this skill when the user wants performance profiling or stack analysis for native apps. Focus: Time Profiler, xctrace CLI, and picking the correct binary/app instance.
Quick Start (CLI)
- List templates:
xcrun xctrace list templates - Record Time Profiler (launch):
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --launch -- /path/To/App.app- Record Time Profiler (attach):
- Launch app yourself, get PID, then:
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --attach <pid>- Open trace in Instruments:
open -a Instruments /tmp/App.trace
Note: xcrun xctrace --help is not a valid subcommand. Use xcrun xctrace help record.
Picking the Correct Binary (Critical)
Gotcha: Instruments may profile the wrong app (e.g., one in /Applications) if LaunchServices resolves a different bundle. Use these rules:
- Prefer direct binary path for deterministic launch:
xcrun xctrace record ... --launch -- /path/App.app/Contents/MacOS/App- If launching
.app, ensure it’s the intended bundle: open -n /path/App.app- Verify with
ps -p <pid> -o comm= -o command= - If both
/Applications/App.appand a local build exist, explicitly target the local build path. - After launch, confirm the process path before trusting the trace.
Command Arguments (xctrace)
--template 'Time Profiler': template name fromxctrace list templates.--launch -- <cmd>: everything after--is the target command (binary or app bundle).--attach <pid|name>: attach to running process.--output <path>:.traceoutput. If omitted, file saved in CWD.--time-limit 60s|5m: set capture duration.--device <name|UDID>: required for iOS device runs.--target-stdout -: stream launched process stdout to terminal (useful for CLI tools).
Exporting Stacks (CLI)
- Inspect trace tables:
xcrun xctrace export --input /tmp/App.trace --toc- Export raw time-profile samples:
xcrun xctrace export --input /tmp/App.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' --output /tmp/time-profile.xml- Post-process in a script (Python/Rust) to aggregate stacks.
Instruments UI Workflow
- Template: Time Profiler
- Use “Record” and capture the slow path (startup vs steady-state)
- Call Tree tips:
- Hide System Libraries
- Invert Call Tree
- Separate by Thread
- Focus on hot frames and call counts
Gotchas & Fixes
- Wrong app profiled: LaunchServices resolves installed app instead of local build.
- Fix: use direct binary path or
--attachwith known PID. - No samples / empty trace: App exits quickly or never hits work.
- Fix: longer capture, trigger workload during recording.
- Privacy prompts:
xctracemay need Developer Tools permission. - Fix: System Settings → Privacy & Security → Developer Tools → allow Terminal/Xcode.
- Large XML exports:
time-profileexports are huge. - Fix: filter with XPath and aggregate offline; don’t print to terminal.
iOS Specific Notes
- Device: use
xcrun xctrace list devicesand--device <UDID>. - Launch via Xcode if needed; attach with
xctrace --attach. - Ensure debug symbols for meaningful stacks.
Verification Checklist
- Confirm trace process path matches target build.
- Confirm stacks show expected app frames.
- Capture covers the slow operation (startup/refresh).
- Export stacks for automated diffing if optimizing.