Openclaw-master-skills native-app-performance
Native macOS/iOS app performance profiling via xctrace/Time Profiler and CLI-only analysis of Instruments traces. Use when asked to profile, attach, record, or analyze Instruments .trace files, find hotspots, or optimize native app performance without opening Instruments UI.
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/native-app-performance" ~/.claude/skills/leoyeai-openclaw-master-skills-native-app-performance && 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/native-app-performance" ~/.openclaw/skills/leoyeai-openclaw-master-skills-native-app-performance && rm -rf "$T"
manifest:
skills/native-app-performance/SKILL.mdsource content
Native App Performance (CLI-only)
Goal: record Time Profiler via
xctrace, extract samples, symbolicate, and propose hotspots without opening Instruments.
Quick start (CLI)
- Record Time Profiler (attach):
# Start app yourself, then attach xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --attach <pid>
- Record Time Profiler (launch):
xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --launch -- /path/App.app/Contents/MacOS/App
- Extract time samples:
scripts/extract_time_samples.py --trace /tmp/App.trace --output /tmp/time-sample.xml
- Get load address for symbolication:
# While app is running vmmap <pid> | rg -m1 "__TEXT" -n
- Symbolicate + rank hotspots:
scripts/top_hotspots.py --samples /tmp/time-sample.xml \ --binary /path/App.app/Contents/MacOS/App \ --load-address 0x100000000 --top 30
Workflow notes
- Always confirm you’re profiling the correct binary (local build vs /Applications). Prefer direct binary path for
.--launch - Ensure you trigger the slow path during capture (menu open/close, refresh, etc.).
- If stacks are empty, capture longer or avoid idle sections.
andxcrun xctrace help record
show correct flags.xcrun xctrace help export
Included scripts
: record via attach or launch.scripts/record_time_profiler.sh
: export time-sample XML from a trace.scripts/extract_time_samples.py
: symbolicate and rank top app frames.scripts/top_hotspots.py
Gotchas
- ASLR means you must use the runtime
load address from__TEXT
.vmmap - If using a new build, update the
path; symbols must match the trace.--binary - CLI-only flow: no need to open Instruments if stacks are symbolicated via
.atos