Supprimer DebugBridge iOS

Supprime le paquet SPM DebugBridge et tout le câblage #if DEBUG d'une app iOS. Annule l'instrumentation de débogage ajoutée par /ios-qa.

Spar Skills Guide Bot
DeveloppementIntermédiaire
0029/08/2026
Claude Code
#ios#debugging#cleanup#swift#spm

Recommandé pour


name: ios-clean preamble-tier: 2 version: 1.0.0 description: | Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. Cleans up StateServer, DebugOverlay, accessor codegen output, and app-side hooks installed by /ios-qa. This is a convenience wrapper — the structural Release-build guard (Package.swift conditional + CI swift build -c release check) is the safety-critical path. Use when asked to "clean the iOS debug bridge", "remove DebugBridge", or "strip the gstack iOS instrumentation". (gstack) voice-triggers:

  • "clean the iOS debug bridge"
  • "remove DebugBridge"
  • "strip the gstack iOS instrumentation" allowed-tools:
  • Bash
  • Read
  • Edit
  • Glob
  • Grep
  • AskUserQuestion triggers:
  • clean the ios debug bridge
  • remove debugbridge
  • strip the gstack ios instrumentation

{{PREAMBLE}}

Strip the DebugBridge from an iOS app

This skill is a convenience flow, not a safety mechanism. The structural guard against shipping DebugBridge in Release is in Package.swift.template (.when(configuration: .debug)) plus the CI invariant test that runs swift build -c release and asserts the DebugBridge symbol is absent. Both ship as part of /ios-qa's template installation.

This skill exists for developers who:

  • Manually copied DebugBridge files (without using /ios-qa's SPM install).
  • Want a guided, reversible removal flow before a security audit.
  • Are migrating away from gstack and want a clean exit.

What it removes

Each item is reverted only after AskUserQuestion confirmation:

  1. The DebugBridge SPM target from Package.swift.
  2. The #if DEBUG block in the app's @main entry that calls DebugBridgeManager.shared.start().
  3. Any standalone // @Snapshotable generator marker comments on the canonical app state class.
  4. Generated StateAccessor.swift files anywhere under the app source.
  5. The gstack-ios-qa.token file under NSTemporaryDirectory() on the device (best-effort — only works if device is connected when /ios-clean runs).

What it does NOT touch

  • App business logic, view models, view code.
  • Anything outside #if DEBUG blocks.
  • Other test or QA infrastructure.

Phase 1: Inventory

  1. Glob for import DebugBridge across the app source.
  2. Glob for #if DEBUG ... DebugBridgeManager blocks.
  3. Glob for // Auto-generated state accessor headers in StateAccessor.swift files.
  4. Parse Package.swift for the DebugBridge dependency entry.
  5. Show the user what's about to be removed (file list + line counts). AskUserQuestion: proceed, dry-run, or abort.

Phase 2: Remove

For each item the user approved:

  1. Use Edit tool to strip the import + the #if DEBUG block (keep the surrounding code intact).
  2. Use Edit tool to remove the .package(url:...DebugBridge...) entry from Package.swift and any targets referencing "DebugBridge".
  3. Delete generated StateAccessor.swift files.
  4. Run xcodebuild -scheme <SchemeName> -destination 'platform=iOS,id=<UDID>' build install -configuration Release to verify Release builds without the bridge. If it fails on a missing DebugBridge symbol, the removal was incomplete — STOP and report.

Phase 3: Verify

  1. ! grep -r "DebugBridge" <app-source-dir> (no matches).
  2. ! grep -r "@Snapshotable" <app-source-dir> (no matches).
  3. swift build -c release succeeds.
  4. nm -j on the built binary doesn't show DebugBridge symbols.

Report the cleanup result + a one-line summary of what got removed.

Reversibility

Every Edit + delete is a git operation; the user can git restore to undo. This skill never force-pushes, never amends, never deletes the SPM cache — those are user choices.

Skills similaires