Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/leoyeai-native-app-performance/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -33% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -52% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -65% | 0% |
Goal: record Time Profiler via xctrace, extract samples, symbolicate, and propose hotspots without opening Instruments.
1) Record Time Profiler (attach):
bash# Start app yourself, then attach xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --attach <pid>
2) Record Time Profiler (launch):
bashxcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --launch -- /path/App.app/Contents/MacOS/App
3) Extract time samples:
bashscripts/extract_time_samples.py --trace /tmp/App.trace --output /tmp/time-sample.xml
4) Get load address for symbolication:
bash# While app is running vmmap <pid> | rg -m1 "__TEXT" -n
5) Symbolicate + rank hotspots:
bashscripts/top_hotspots.py --samples /tmp/time-sample.xml \ --binary /path/App.app/Contents/MacOS/App \ --load-address 0x100000000 --top 30
--launch.xcrun xctrace help record and xcrun xctrace help export show correct flags.scripts/record_time_profiler.sh: record via attach or launch.scripts/extract_time_samples.py: export time-sample XML from a trace.scripts/top_hotspots.py: symbolicate and rank top app frames.__TEXT load address from vmmap.--binary path; symbols must match the trace.atos.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,339 | 6,583 | -60% | 1 | 1 | 0% | 2,506 | 1,685 | -33% | 0 | 0 | — |
case-02 | fail→fail | 43,360 | 15,515 | -64% | 1 | 1 | 0% | 2,265 | 3,354 | +48% | 0 | 0 | — |
case-03 | fail→pass | 26,622 | 6,983 | -74% | 1 | 1 | 0% | 1,429 | 1,918 | +34% | 0 | 0 | — |
case-04 | pass→pass | 5,593 | 2,692 | -52% | 1 | 1 | 0% | 955 | 1,012 | +6% | 0 | 0 | — |
case-05 | fail→pass | 9,641 | 4,415 | -54% | 1 | 1 | 0% | 1,630 | 1,362 | -16% | 0 | 0 | — |
case-06 | fail→pass | 10,967 | 2,008 | -82% | 1 | 1 | 0% | 1,890 | 904 | -52% | 0 | 0 | — |
case-21 | pass→pass | 11,201 | 9,632 | -14% | 1 | 1 | 0% | 1,916 | 2,282 | +19% | 0 | 0 | — |
case-07 | pass→pass | 9,520 | 2,466 | -74% | 1 | 1 | 0% | 1,616 | 956 | -41% | 0 | 0 | — |
case-08 | fail→pass | 18,165 | 2,972 | -84% | 1 | 1 | 0% | 3,027 | 1,050 | -65% | 0 | 0 | — |
case-09 | fail→pass | 14,367 | 12,152 | -15% | 1 | 1 | 0% | 2,379 | 2,512 | +6% | 0 | 0 | — |
case-10 | pass→pass | 10,547 | 1,918 | -82% | 1 | 1 | 0% | 1,725 | 836 | -52% | 0 | 0 | — |
case-11 | fail→pass | 4,058 | 2,115 | -48% | 1 | 1 | 0% | 765 | 838 | +10% | 0 | 0 | — |
case-12 | pass→pass | 7,158 | 4,216 | -41% | 1 | 1 | 0% | 1,146 | 1,123 | -2% | 0 | 0 | — |
case-13 | fail→pass | 11,404 | 1,960 | -83% | 1 | 1 | 0% | 1,817 | 777 | -57% | 0 | 0 | — |
case-14 | pass→pass | 9,139 | 2,929 | -68% | 1 | 1 | 0% | 1,554 | 1,049 | -32% | 0 | 0 | — |
case-15 | fail→pass | 10,328 | 3,277 | -68% | 1 | 1 | 0% | 1,673 | 1,131 | -32% | 0 | 0 | — |
case-16 | pass→pass | 10,569 | 3,044 | -71% | 1 | 1 | 0% | 1,838 | 1,063 | -42% | 0 | 0 | — |
case-17 | fail→pass | 9,232 | 2,159 | -77% | 1 | 1 | 0% | 1,592 | 903 | -43% | 0 | 0 | — |
case-18 | pass→pass | 3,770 | 2,010 | -47% | 1 | 1 | 0% | 628 | 798 | +27% | 0 | 0 | — |
case-19 | fail→pass | 6,164 | 3,291 | -47% | 1 | 1 | 0% | 1,070 | 1,048 | -2% | 0 | 0 | — |
case-20 | pass→pass | 13,091 | 10,305 | -21% | 1 | 1 | 0% | 2,279 | 2,283 | +0% | 0 | 0 | — |
case-22 | pass→pass | 11,359 | 7,186 | -37% | 1 | 1 | 0% | 1,815 | 1,726 | -5% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.