Apple Crash Log .NET Symbolication
dotnet/skills
Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.
A skill your agent uses when debugging SwiftUI issues in this macOS app — views not updating, layout problems, unnecessary re-renders, state ownership bugs, Preview crashes, or NSHostingView/NSPanel…
$ npx skills add st0012/cctop --skill swiftui-debugging -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install st0012/cctop swiftui-debugging --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/swiftui-debugging .claude/skills/swiftui-debugging && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .claude/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debuggingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add st0012/cctop --skill swiftui-debugging -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install st0012/cctop swiftui-debugging --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/swiftui-debugging .agents/skills/swiftui-debugging && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .agents/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add st0012/cctop --skill swiftui-debugging -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install st0012/cctop swiftui-debugging --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/swiftui-debugging .cursor/skills/swiftui-debugging && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .cursor/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/st0012/cctop.git --path .agents/skills/swiftui-debugging--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add st0012/cctop --skill swiftui-debugging -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install st0012/cctop swiftui-debugging --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/swiftui-debugging .gemini/skills/swiftui-debugging && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .gemini/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install st0012/cctop swiftui-debuggingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add st0012/cctop --skill swiftui-debugging -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/swiftui-debugging .github/skills/swiftui-debugging && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .github/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add st0012/cctop --skill swiftui-debugging -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install st0012/cctop swiftui-debugging --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/st0012/cctop.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/swiftui-debugging .opencode/skills/swiftui-debugging && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "swiftui-debugging" agent skill from https://github.com/st0012/cctop/tree/master/.agents/skills/swiftui-debugging into .opencode/skills/swiftui-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swiftui-debugging", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
swiftui-debuggingA skill your agent uses when debugging SwiftUI issues in this macOS app — views not updating, layout problems, unnecessary re-renders, state ownership bugs, Preview crashes, or NSHostingView/NSPanel…
Swiftui Debugging is an agent skill from st0012/cctop. Use when debugging SwiftUI issues in this macOS app — views not updating, layout problems, unnecessary re-renders, state ownership bugs, Preview crashes, or NSHostingView/NSPanel quirks. Covers both general SwiftUI debugging and macOS-specific patterns.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering iOS development and Debugging. It works with SwiftUI and macOS. The repository describes itself as: A keyboard-first menubar app to monitor and jump between AI coding sessions — minimum setup required. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 4ee2258. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are swift).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Swiftui Debugging loads about 2k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 725 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from st0012/cctop at commit 4ee2258, republished under its MIT licence (© st0012). 725 words, ~1,964 tokens.
.claude/skills/swiftui-debugging/SKILL.md (or your agent's skills folder).Systematic approaches for debugging SwiftUI issues in macOS apps. Covers view updates, state ownership, performance, layout, and macOS-specific quirks with NSHostingView and NSPanel.
print() and NSLog() are invisible when launching macOS apps from CLI or Finder (menubar-only apps have no console). Always use file-based logging:
func debugLog(_ message: String) {
let entry = "\(Date()) \(message)\n"
let url = URL(fileURLWithPath: "/tmp/debug.log")
if let handle = try? FileHandle(forWritingTo: url) {
handle.seekToEndOfFile()
handle.write(entry.data(using: .utf8)!)
handle.closeFile()
} else {
try? entry.write(to: url, atomically: true, encoding: .utf8)
}
}Remove all debug logging before committing. Use grep -r "debugLog" --include="*.swift" to verify.
View shows stale data after a confirmed state change. Common with hostingView.rootView = NewView(...) not propagating to children, or theme/color changes not reflecting.
SwiftUI skips re-evaluating a child view's body if the child's struct inputs haven't changed — even if the child reads from a singleton or computed property that did change.
Parent: rootView = MyView(counts: same)
→ SwiftUI: "counts didn't change, skip child body"
→ Child: never re-reads StatusColors.working
→ Result: stale colorsSelf._printChanges() at the top of body to see what SwiftUI thinks triggered (or didn't trigger) a re-evaluation| Root Cause | Fix |
|---|---|
| Child reads external state not in its inputs | Pass a changing value and add .id(value) to force recreation |
@State destroyed by .id() changes | Extract into @StateObject owned by parent above the .id() boundary |
NSColor(name:) dynamic colors cached | Use .id() to force re-resolution |
@Published changed but view doesn't update | Verify view uses @ObservedObject, not a plain property |
.id() Force-Recreationstruct NotchStatusView: View {
let counts: StatusCounts
var themeId: String = "" // changes when theme changes
var body: some View {
HStack { ... }
.id(themeId) // forces ALL children to recreate
}
}Tradeoff: .id() destroys the entire subtree including @State.
.id())// Move @State into @StateObject owned above the .id() boundary
class OverlayController: ObservableObject {
@Published var active: Overlay?
}
struct ParentView: View {
@StateObject private var controller = OverlayController() // survives
var body: some View {
ChildView(controller: controller)
.id(themeId) // safe — controller lives here
}
}@State vs @StateObject vs @ObservedObject| Wrapper | Owned by | Lifetime | Use when |
|---|---|---|---|
@State | The view | Dies with view identity (.id()) | Simple value types internal to one view |
@StateObject | The view that creates it | Survives re-renders, dies with view | You create the object and own its lifetime |
@ObservedObject | Someone else | You don't control it | Passed in from parent, not owned here |
@ObservedObject with inline init// BUG: creates new instance every re-render, losing state
struct MyView: View {
@ObservedObject var model = MyModel() // wrong — recreated each time
}
// FIX: use @StateObject for owned objects
struct MyView: View {
@StateObject var model = MyModel() // correct — created once
}Add Self._printChanges() at the top of body to see what SwiftUI thinks changed:
var body: some View {
let _ = Self._printChanges() // prints: "MyView: @self, _count changed."
...
}Equatable — SwiftUI can't diff, re-renders every time. Add Equatable conformance.EquatableView.@Published — publishing a large object when only one field changed. Break into granular publishers or use @Observable (macOS 14+).// Highlight view bounds
.border(Color.red)
.background(Color.blue.opacity(0.2))
// Check what size SwiftUI gives a view
.overlay(GeometryReader { geo in
Text("\(Int(geo.size.width))×\(Int(geo.size.height))")
.font(.caption2).foregroundColor(.red)
}).frame() or parent doesn't propose a size. Check with background(Color.red).fixedSize() lets text exceed proposed size, or use lineLimit(nil)..frame() or use it only for reading, not sizing.init() or computed properties won't show a stack traceBundle.main returns different values@AppStorage reads from a different UserDefaults suite in previewsrootView replacementSetting hostingView.rootView = NewView(...) does NOT recreate the view tree — SwiftUI diffs the old and new struct. If inputs are identical, children skip body evaluation. This is the most common source of "view not updating" bugs in macOS apps using NSHostingView.
needsDisplay = true on NSHostingView does nothing — SwiftUI manages its own display cycleorderOut(nil) hides but doesn't destroy the hosting view; state persistsNSPanel with styleMask: [.nonactivatingPanel] and override canBecomeKey to avoid stealing focus@MainActor cascadeMaking a type @MainActor (e.g., to access ThemeManager.shared) cascades to everything that uses it. Plan for this — it often requires @MainActor on models, renderers, controllers, and test classes. Add it top-down rather than chasing compiler errors bottom-up.
| Problem | First step |
|---|---|
| View shows stale data | Self._printChanges() — is body even called? |
| View never re-renders | Check property wrappers — @ObservedObject vs @StateObject |
| State resets unexpectedly | Look for .id() changes destroying @State |
| Can't see print output | Use file-based logging (/tmp/debug.log) |
| Layout wrong | .border(Color.red) on suspect views |
| Preview crashes | Check for singleton/file access in init |
| NSHostingView children stale | Inputs unchanged → use .id() to force recreation |
@MainActor errors everywhere | Add top-down from the root type, not bottom-up |
© st0012, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/swiftui-debugging of st0012/cctop.
Open the folder on GitHubat commit 4ee2258
Swiftui Debugging next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Swiftui Debugging this skillst0012/cctop | 154 | — | ~2k | Automated safety check: Pass | MIT | |
| Apple Crash Log .NET Symbolicationdotnet/skills | 5.6k | 1 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Capture Usage4claude Screenshotsf-is-h/Usage4Claude | 400 | — | ~3k | Automated safety check: Pass | MIT | |
| macOS DevelopmentKartikLabhshetwar/better-shot | 2.4k | 2 repos | ~735 | Automated safety check: Pass | Custom licence | |
| Playback Webview Debuggingsozercan/kaset | 2.4k | — | ~480 | Automated safety check: Pass | MIT | |
| Code ReviewRobertoMachorro/Moped | 115 | — | ~2.1k | Automated safety check: Pass | GPL-3.0 |
dotnet/skills
Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.
f-is-h/Usage4Claude
Produce every Usage4Claude interface image used by the READMEs and docs.
KartikLabhshetwar/better-shot
Comprehensive macOS development guidance including Swift 6+, SwiftUI, SwiftData, architecture patterns, AppKit bridging, and macOS 26 Tahoe APIs.
sozercan/kaset
A skill your agent uses when playback, auth recovery, queue sync, or hidden WebView state diverges from native Swift state and you need to debug the DRM playback WebView, bridge events, or…
RobertoMachorro/Moped
Review guidance for Moped, a sandboxed macOS SwiftUI text editor with a homegrown TextKit 1 editor core in the local MopedEditor package.
ShiinaLabs/wifi-lens
Invoke only when the user explicitly requests a WiFi Lens knowledge-boundary audit or the active task names that audit as a required deliverable.
st0012/cctop
A skill your agent uses when smoke-testing cctop end to end — verifying a real coding-agent session is tracked and shows in the panel.
st0012/cctop
A skill your agent uses when publishing, replacing, auditing, or linking cctop promo/demo video assets through GitHub Releases, especially the non-latest media-assets release.
st0012/cctop
A skill your agent uses when cutting or preparing a cctop release - "cut a release", "release vX.Y.Z", "prepare a release", "bump the version and tag", "ship a new version".
st0012/cctop
A skill your agent uses when designing, scripting, or storyboarding a short demo, launch, explainer, or marketing video (especially for a developer tool, app, or SaaS), OR when auditing, critiquing…
st0012/cctop
A skill your agent uses when cctop-hook command fails or is not found.
st0012/cctop
Restart cctop for local development and testing. An agent skill from st0012/cctop.
Categories
A skill your agent uses when debugging SwiftUI issues in this macOS app — views not updating, layout problems, unnecessary re-renders, state ownership bugs, Preview crashes, or NSHostingView/NSPanel…. Swiftui Debugging is an agent skill from st0012/cctop. Use when debugging SwiftUI issues in this macOS app — views not updating, layout problems, unnecessary re-renders, state ownership bugs, Preview crashes, or NSHostingView/NSPanel quirks.
Swiftui Debugging fits situations like: debugging SwiftUI issues in this macOS app — views not updating; layout problems; unnecessary re-renders; state ownership bugs.
Run `npx skills add st0012/cctop --skill swiftui-debugging -a claude-code`. Or copy the skill folder (.agents/skills/swiftui-debugging in st0012/cctop) into .claude/skills/swiftui-debugging in your project. Claude Code loads it when a task matches its description.
Run `npx skills add st0012/cctop --skill swiftui-debugging -a codex`. Or copy the skill folder (.agents/skills/swiftui-debugging in st0012/cctop) into .agents/skills/swiftui-debugging in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add st0012/cctop --skill swiftui-debugging -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/swiftui-debugging, .gemini/skills/swiftui-debugging, .github/skills/swiftui-debugging and .opencode/skills/swiftui-debugging in your project.
SKILL.md names no scripts, command-line tools or credentials: Swiftui Debugging is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Swiftui Debugging is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 7.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Swiftui Debugging: Apple Crash Log .NET Symbolication (dotnet/skills, 5.6k stars), Capture Usage4claude Screenshots (f-is-h/Usage4Claude, 400 stars), macOS Development (KartikLabhshetwar/better-shot, 2.4k stars) and Playback Webview Debugging (sozercan/kaset, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
st0012 (a GitHub user) maintains it in st0012/cctop, which has 154 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 1, 2026.
Source: st0012/cctop on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.