Architectural Invariant Design: KMP 2.1 Swift Export ARC-to-GC Reference Cycle Guardrail
KMP 2.1 Swift Export ARC-to-GC Reference Cycle Guardrail defines an industrial-grade behavioral standard for mobile engineering. Defines mandatory reference retention semantics and explicit lifetime unbinding between Kotlin/Native tracing GC and Apple Swift Automatic Reference Counting (ARC) under Kotlin 2.1 Swift Export. Eliminates cross-runtime uncollectible memory leaks caused by bidirectional strong retention across Swift delegates and long-lived Kotlin state holders. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.
Hazard Analysis: What Breaks Without This Rule
The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:
| Failure Mode | AI Symptom (The Anti-Pattern) | Severity | Production Impact & Remedy |
|---|---|---|---|
| AI Hallucination & Deprecation Drift | Bidirectional Strong Retention Between Swift Observers and Kotlin Exported Services | Critical | Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production. Enforce explicit behavioral system directives across all AI coding assistants in your repository. |
| Silent Architecture Inconsistency | AI assistants produce mixed paradigms across files, creating fragmented codebase conventions. | Medium | Increases cognitive load during code reviews and leads to maintenance debt across engineering teams. Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails. |
Step-by-Step Production Directives
Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:
Engineers MUST ALWAYS decouple cross-runtime bidirectional graphs by declaring Swift-side callbacks with weak capture semantics (`[weak self]`) or wrapping Kotlin bridge references in `kotlin.native.ref.WeakReference`.
Engineers MUST ALWAYS decouple cross-runtime bidirectional graphs by declaring Swift-side callbacks with weak capture semantics (`[weak self]`) or wrapping Kotlin bridge references in `kotlin.native.ref.WeakReference`.
Engineers MUST NOT store direct strong references to Swift protocol implementations or closure callbacks inside long-lived Kotlin singletons or application-scoped state holders.
Engineers MUST NOT store direct strong references to Swift protocol implementations or closure callbacks inside long-lived Kotlin singletons or application-scoped state holders.
Kotlin-exported subscription or observation APIs MUST return an explicit `DisposableHandle` or `Cancellable` contract rather than relying on object deallocation across the bridge.
Kotlin-exported subscription or observation APIs MUST return an explicit `DisposableHandle` or `Cancellable` contract rather than relying on object deallocation across the bridge.
Swift clients observing Kotlin Multiplatform view models or repositories MUST explicitly cancel tokens within `deinit`, SwiftUI `.onDisappear`, or lifecycle teardown blocks.
Swift clients observing Kotlin Multiplatform view models or repositories MUST explicitly cancel tokens within `deinit`, SwiftUI `.onDisappear`, or lifecycle teardown blocks.
Kotlin bridge interfaces that require observer notifications SHOULD model listeners through non-retaining delegate containers or thread-safe atomic weak-reference lists.
Kotlin bridge interfaces that require observer notifications SHOULD model listeners through non-retaining delegate containers or thread-safe atomic weak-reference lists.
Swift closures passed across the exported boundary MUST NEVER capture non-local escaping contexts without explicitly guarded weak captures.
Swift closures passed across the exported boundary MUST NEVER capture non-local escaping contexts without explicitly guarded weak captures.
Frequently Asked Technical Questions
Common questions developers face when configuring AI coding assistants for this stack:
Q:Why is KMP 2.1 Swift Export ARC-to-GC Reference Cycle Guardrail critical for AI coding assistants?
Defines mandatory reference retention semantics and explicit lifetime unbinding between Kotlin/Native tracing GC and Apple Swift Automatic Reference Counting (ARC) under Kotlin 2.1 Swift Export. Eliminates cross-runtime uncollectible memory leaks caused by bidirectional strong retention across Swift delegates and long-lived Kotlin state holders. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.
Q:How does adopting this rule prevent AI hallucinations?
This rule explicitly declares what the AI must avoid (Bidirectional Strong Retention Between Swift Observers and Kotlin Exported Services) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.
Q:Which AI coding environments are supported?
This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).
Q:Can I combine this rule with other technology stacks?
Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.