name: ios-memgraph-inspector
description: Capture, inspect, compare, and prove iOS leaks with Apple's leaks, simulator memgraphs, retain-cycle evidence, and before/after leak summaries.
iOS Memgraph Inspector
Use for leaks from a live simulator process or existing .memgraph. Pair with ../ios-simulator-debugger/SKILL.md when build, launch, UI driving, logs, or screenshots are needed.
Workflow
- Build, launch, and drive the exact flow that should release objects.
- Capture with
scripts/capture_sim_memgraph.sh. - Summarize with
scripts/summarize_memgraph_leaks.py. - For app-owned leaked types, inspect ownership with
leaks --traceTree=<address> <file.memgraph>and grouped leak evidence. - Patch the smallest retaining edge, then recapture the same flow/simulator when possible.
- Report before/after counts, disappeared root types or paths, remaining leaks, memgraph paths, and build/test proof.
Do not claim a fix from a smaller memgraph alone; prove the specific type or ownership path disappeared.
Capture
SKILL_DIR is the loaded skill folder, not the app repo.
SKILL_DIR="<absolute path to this loaded skill folder>"
SIM="<simulator-udid>"
BUNDLE_ID="<app.bundle.identifier>"
MEMGRAPH_DIR="$(mktemp -d "${TMPDIR:-/tmp}/codex-ios-memgraph.XXXXXX")"
"$SKILL_DIR/scripts/capture_sim_memgraph.sh" \
--udid "$SIM" \
--bundle-id "$BUNDLE_ID" \
--out-dir "$MEMGRAPH_DIR"
If the process is missing, verify the bundle id and inspect running labels:
xcrun simctl spawn "$SIM" launchctl list
Summarize:
"$SKILL_DIR/scripts/summarize_memgraph_leaks.py" \
/path/to/app.memgraph \
--trace-limit 5 \
--out /path/to/leak-summary.md
Use --trace-limit sparingly. If traceTree says Found 0 roots referencing, treat it as an unreachable/self-retained candidate and inspect leaks --groupByType <file.memgraph> plus source.
Root-Cause Rules
- Identify the first app-owned leaked type.
- Determine intended lifetime: process, session, account, view, request, or task.
- Lazy allocation is scope reduction, not proof of a fixed leak.
- Prove retain cycles with
traceTreeor an isolated repro. - Separate framework/runtime noise from app-owned branches.
- Prefer removing the retaining edge over broad cleanup code.
Report
Include flow, simulator/app build, memgraph and summary paths, leaked app types/counts, ownership path or grouped evidence, applied/proposed fix, and before/after evidence. If only framework noise appears, say so and recommend a narrower capture.