Best for
- Use when capturing or analyzing ETTrace profiles for a focused iOS launch or runtime flow, including exact-build dSYM UUID matching, Simulator or device capture, processed per-thread flamegraph JSON, sampled inclusive/e…
dpearson2699/swift-ios-skills/skills/ios-ettrace-performance/SKILL.md
Use when capturing or analyzing ETTrace profiles for a focused iOS launch or runtime flow, including exact-build dSYM UUID matching, Simulator or device capture, processed per-thread flamegraph JSON, sampled inclusive/exclusive time, unresolved symbols, and comparable verification. Use debugging-instruments or swiftui-performance for generic profiling instead.
Decision brief
Use ETTrace for a bounded, symbolicated sampling experiment. Treat capture conditions and symbolication as part of the evidence, not as setup trivia.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill "skills/ios-ettrace-performance"Inspect the Agent Skill "ios-ettrace-performance" from https://github.com/dpearson2699/swift-ios-skills/blob/90c9573272531337962fbb3505036d61ed23389a/skills/ios-ettrace-performance/SKILL.md at commit 90c9573272531337962fbb3505036d61ed23389a. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Confirm that ETTrace's sampled flamechart is the right next tool. Prefer Instruments first when the slow interval is unknown, spans many subsystems, or needs system-level blocking, I/O, hitch, or concurrency context.
[ ] One reproducible flow and start/stop boundary are recorded.
This skill owns ETTrace framework/CLI capture, exact-build dSYMs, processed flamegraph JSON, and like-for-like verification. Use Instruments for broad CPU, hitch, energy, or concurrency triage. Use SwiftUI performance guidance for view identity, invalidation, and layout remediat…
Write these down before capturing:
Confirm that ETTrace's sampled flamechart is the right next tool. Prefer Instruments first when the slow interval is unknown, spans many subsystems, or needs system-level blocking, I/O, hitch, or concurrency context.
Permission review
The documentation asks the agent to run terminal commands or scripts.
python3 scripts/collect_dsyms.py \The documentation asks the agent to run terminal commands or scripts.
python3 scripts/analyze_ettrace.py \Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 77/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 933 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Use ETTrace for a bounded, symbolicated sampling experiment. Treat capture conditions and symbolication as part of the evidence, not as setup trivia.
This skill owns ETTrace framework/CLI capture, exact-build dSYMs, processed flamegraph JSON, and like-for-like verification. Use Instruments for broad CPU, hitch, energy, or concurrency triage. Use SwiftUI performance guidance for view identity, invalidation, and layout remediation.
ETTrace periodically samples thread stacks. Its durations reconstruct sampled attribution from those intervals; do not present them as wall-clock production timings or compare them directly with a differently configured profiler.
Write these down before capturing:
Reject a before/after claim when any of these materially differ. Rebuild and repeat under one contract instead.
Confirm that ETTrace's sampled flamechart is the right next tool. Prefer Instruments first when the slow interval is unknown, spans many subsystems, or needs system-level blocking, I/O, hitch, or concurrency context.
Choose one flow small enough to repeat. Launch, first screen construction, opening one document, or applying one edit are useful boundaries; "use the app" is not.
Install the runner from the official tap and link the ETTrace package product into the app target being measured. Record the runner version and the framework revision or tag separately, then keep both fixed across compared captures. The bundled analyzer supports the verified v1.1.1 processed output shape; re-check upstream and the parser before using a different format.
brew install emergetools/homebrew-tap/ettrace
Run the instrumented app once and confirm the Starting ETTrace log. Absence of
that message means capture evidence is not trustworthy. Keep this wiring out of
shipping configurations unless the project deliberately owns that tradeoff.
Use the final instrumented build for both capture and dSYM collection. Never choose a dSYM by filename, modification time, or Derived Data proximity.
mkdir -p /tmp/myapp-ettrace
python3 scripts/collect_dsyms.py \
--app /path/to/Build/Products/Release-iphonesimulator/MyApp.app \
--search-root /path/to/Build/Products \
--search-root /path/to/Archives \
--output /tmp/myapp-ettrace/dsyms \
--pretty > /tmp/myapp-ettrace/dsym-report.json
The helper compares dwarfdump --uuid output for the app executable and
embedded binaries. Missing or ambiguous UUID matches stop the run by default.
Read and preserve dsym-report.json rather than assuming every copied symbol
file is relevant. The helper fails when UUID matches cannot be copied to unique
flat destination names that ETTrace 1.1.1 can discover.
Run ETTrace from an empty directory because processed files are written to the
current working directory. Use --simulator for Simulator and --dsyms for the
exact dSYM directory. Add --launch only for launch work, and follow the
runner's two-launch prompts exactly.
mkdir -p /tmp/myapp-ettrace
mkdir /tmp/myapp-ettrace/run-01
cd /tmp/myapp-ettrace/run-01
ettrace --simulator --dsyms /tmp/myapp-ettrace/dsyms
The second mkdir must fail if that per-run directory already exists. Choose a
new run name instead of mixing processed captures from retries.
Launch by tapping the app on the Home Screen when the runner asks. Launching
from Xcode can change the launch path and timing. For device capture, omit
--simulator; keep all other experiment fields stable.
Stop immediately after the bounded flow and preserve every fresh
output_<threadId>.json with the capture contract. ETTrace 1.1.1 creates these
processed files after symbolication. Its internal raw runner output.json is a
different artifact and is not accepted by the analyzer below.
python3 scripts/analyze_ettrace.py \
/tmp/myapp-ettrace/run-01/output_*.json \
--top 25 --pretty > /tmp/myapp-ettrace/run-01/summary.json
The helper validates the v1.1.1 processed node shape, rejects duplicate inputs
or mixed osBuild/device/isSimulator metadata, handles the serializer's
object-or-array children field, and emits deterministic JSON. It does not
rewrite the capture files. Keep those originals beside the summary.
Stop and repair symbolication when important app frames are <unknown>, raw
addresses, or attributed to the wrong binary. An unsymbolicated hot address is
an evidence gap, not a code recommendation. ETTrace 1.1.1 address-bearing nodes
are listed under unresolved_frames and excluded from ordinary hotspots.
Make the smallest code or configuration change supported by a hot app-owned path. Rebuild, recollect UUID-matched dSYMs, and capture the same flow at least twice. Report variance and the full capture contract with the result.
<unattributed> is reported separately. A large value weakens conclusions
about what happened in the missing interval.output_<threadId>.json files are preserved unchanged.Alternatives
event4u-app/agent-config
Use when the user says "review the design", "check the UI", or wants a comprehensive UI/UX review. Uses a 7-phase methodology covering interaction, responsiveness, accessibility, and more.
K-Dense-AI/scientific-agent-skills
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.
K-Dense-AI/scientific-agent-skills
Use NeuroKit2 to build or audit reproducible research workflows for physiological time-series preprocessing, event/interval analysis, multimodal alignment, variability, and complexity. Trigger when code imports neurokit2 or needs its current APIs, schemas, and method-aware validation—not for diagnosis or device validation.
K-Dense-AI/scientific-agent-skills
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.