Openclaw-master-skills instruments-profiling
Use when profiling native macOS or iOS apps with Instruments/xctrace. Covers correct binary selection, CLI arguments, exports, and common gotchas.
install
source · Clone the upstream repo
git clone https://github.com/LeoYeAI/openclaw-master-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LeoYeAI/openclaw-master-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/instruments-profiling" ~/.claude/skills/leoyeai-openclaw-master-skills-instruments-profiling && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LeoYeAI/openclaw-master-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/instruments-profiling" ~/.openclaw/skills/leoyeai-openclaw-master-skills-instruments-profiling && rm -rf "$T"
manifest:
skills/instruments-profiling/SKILL.mdsource content
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
, ensure it’s the intended bundle:.appopen -n /path/App.app- Verify with
ps -p <pid> -o comm= -o command=
- If both
and a local build exist, explicitly target the local build path./Applications/App.app - After launch, confirm the process path before trusting the trace.
Command Arguments (xctrace)
: template name from--template 'Time Profiler'
.xctrace list templates
: everything after--launch -- <cmd>
is the target command (binary or app bundle).--
: attach to running process.--attach <pid|name>
:--output <path>
output. If omitted, file saved in CWD..trace
: set capture duration.--time-limit 60s|5m
: required for iOS device runs.--device <name|UDID>
: stream launched process stdout to terminal (useful for CLI tools).--target-stdout -
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
with known PID.--attach
- Fix: use direct binary path or
- No samples / empty trace: App exits quickly or never hits work.
- Fix: longer capture, trigger workload during recording.
- Privacy prompts:
may need Developer Tools permission.xctrace- Fix: System Settings → Privacy & Security → Developer Tools → allow Terminal/Xcode.
- Large XML exports:
exports are huge.time-profile- Fix: filter with XPath and aggregate offline; don’t print to terminal.
iOS Specific Notes
- Device: use
andxcrun xctrace list devices
.--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.