iOS Games Router
You MUST use this skill for ANY game development, SpriteKit, SceneKit, RealityKit, or interactive simulation work.
When to Use
Use this router when:
-
Building a new SpriteKit game or prototype (2D)
-
Building a 3D game with SceneKit or RealityKit
-
Implementing physics (collisions, contacts, forces, joints)
-
Setting up game architecture (scenes, layers, cameras, ECS)
-
Debugging SpriteKit, SceneKit, or RealityKit issues
-
Optimizing game performance (draw calls, node counts, entity counts, batching)
-
Managing game loop, delta time, or pause handling
-
Implementing touch/input handling in a game context
-
Integrating SpriteKit or RealityKit with SwiftUI
-
Working with particle effects, texture atlases, or 3D models
-
Looking up SpriteKit, SceneKit, or RealityKit API details
-
Migrating from SceneKit to RealityKit
-
Building AR games with RealityKit
Routing Logic
SpriteKit (2D)
Architecture, patterns, and best practices → /skill axiom-spritekit
-
Scene graph model, coordinate systems, anchor points
-
Physics engine: bitmask discipline, contact detection, body types
-
Actions system: sequencing, grouping, named actions, timing
-
Input handling: touches, coordinate conversion
-
Performance: draw calls, batching, object pooling, SKShapeNode trap
-
Game loop: frame cycle, delta time, pause handling
-
Scene transitions and data passing
-
SwiftUI integration (SpriteView, UIViewRepresentable)
-
Metal integration (SKRenderer)
-
Anti-patterns and code review checklist
-
Pressure scenarios with push-back templates
API reference and lookup → /skill axiom-spritekit-ref
-
All 16 node types with properties and performance notes
-
SKPhysicsBody creation methods and properties
-
Complete SKAction catalog (movement, rotation, scaling, fading, composition, physics)
-
Texture and atlas management
-
SKConstraint types and SKRange
-
SKView configuration and scale modes
-
SKEmitterNode properties and presets
-
SKRenderer setup and SKShader syntax
Troubleshooting and diagnostics → /skill axiom-spritekit-diag
-
Physics contacts not firing (6-branch decision tree)
-
Objects tunneling through walls (5-branch)
-
Poor frame rate (4 top branches, 12 leaves)
-
Touches not registering (6-branch)
-
Memory spikes and crashes (5-branch)
-
Coordinate confusion (5-branch)
-
Scene transition crashes (5-branch)
Automated scanning → Launch spritekit-auditor agent or /axiom:audit spritekit (physics bitmasks, draw call waste, node accumulation, action memory leaks, coordinate confusion, touch handling, missing object pooling, missing debug overlays)
SceneKit (3D — Deprecated)
SceneKit is soft-deprecated as of iOS 26. Use for maintenance of existing code only. New 3D projects should use RealityKit.
Maintenance and migration planning → /skill axiom-scenekit
-
Scene graph architecture, coordinate system, transforms
-
Rendering: SCNView, SceneView (deprecated), SCNViewRepresentable
-
Geometry, PBR materials, shader modifiers
-
Lighting, animation (SCNAction, SCNTransaction, CAAnimation bridge)
-
Physics: bodies, collision categories, contact delegate
-
Asset pipeline: Model I/O, USD/DAE/SCN formats
-
ARKit integration (legacy ARSCNView)
-
Migration decision tree (when to migrate vs maintain)
-
Anti-patterns and pressure scenarios
API reference and migration mapping → /skill axiom-scenekit-ref
-
Complete SceneKit → RealityKit concept mapping table
-
Scene graph API: SCNScene, SCNNode, SCNGeometry
-
Materials: lighting models, PBR properties, shader modifiers
-
Lighting: all light types with properties
-
Camera: SCNCamera properties
-
Physics: body types, shapes, joints
-
Animation: SCNAction catalog, timing functions
-
Constraints: all constraint types
RealityKit (3D — Modern)
For non-game 3D content display (product viewers, AR try-on, spatial computing), the ios-graphics router also routes to these RealityKit skills.
Architecture, ECS, and best practices → /skill axiom-realitykit
-
Entity-Component-System mental model and paradigm shift
-
Entity hierarchy, transforms, world-space queries
-
Built-in and custom components, component lifecycle
-
System protocol, update ordering, event handling
-
SwiftUI integration: RealityView, Model3D, attachments
-
AR on iOS: AnchorEntity types, SpatialTrackingSession
-
Interaction: ManipulationComponent, gestures, hit testing
-
Materials: SimpleMaterial, PBR, Unlit, Occlusion, ShaderGraph, Custom
-
Physics: collision shapes, groups/filters, events, forces
-
Animation: transform, USD playback, playback control
-
Audio: spatial, ambient, channel
-
Performance: instancing, component churn, shape optimization
-
Multiplayer: synchronization, ownership
-
Anti-patterns and code review checklist
-
Pressure scenarios
API reference and lookup → /skill axiom-realitykit-ref
-
Entity API: properties, hierarchy, subclasses
-
Complete component catalog with all properties
-
MeshResource generators
-
ShapeResource types and performance
-
System protocol and EntityQuery
-
Scene events catalog
-
RealityView API: initializers, content, gestures
-
Model3D API
-
Material system: all types with full property listings
-
Animation timing functions and playback control
-
Audio components and playback
-
RealityRenderer (Metal integration)
Troubleshooting and diagnostics → /skill axiom-realitykit-diag
-
Entity not visible (8-branch decision tree)
-
Anchor not tracking (6-branch)
-
Gesture not responding (6-branch)
-
Performance problems (7-branch)
-
Material looks wrong (6-branch)
-
Physics not working (6-branch)
-
Multiplayer sync issues (5-branch)
Decision Tree
-
Building/designing a 2D SpriteKit game? → axiom-spritekit
-
How to use a specific SpriteKit API? → axiom-spritekit-ref
-
SpriteKit broken or performing badly? → axiom-spritekit-diag
-
Maintaining existing SceneKit code? → axiom-scenekit
-
SceneKit API reference or migration mapping? → axiom-scenekit-ref
-
Building new 3D game or experience? → axiom-realitykit
-
How to use a specific RealityKit API? → axiom-realitykit-ref
-
RealityKit entity not visible, gestures broken, performance? → axiom-realitykit-diag
-
Migrating SceneKit to RealityKit? → axiom-scenekit (migration tree) + axiom-scenekit-ref (mapping table)
-
Building AR game? → axiom-realitykit
-
Physics contacts not working (SpriteKit)? → axiom-spritekit-diag (Symptom 1)
-
Frame rate dropping (SpriteKit)? → axiom-spritekit-diag (Symptom 3)
-
Coordinate/position confusion (SpriteKit)? → axiom-spritekit-diag (Symptom 6)
-
Need the complete action list? → axiom-spritekit-ref (Part 3)
-
Physics body setup reference? → axiom-spritekit-ref (Part 2)
-
Entity not visible (RealityKit)? → axiom-realitykit-diag (Symptom 1)
-
Gesture not responding (RealityKit)? → axiom-realitykit-diag (Symptom 3)
-
Want automated SpriteKit code scan? → spritekit-auditor (Agent)
Anti-Rationalization
Thought Reality
"SpriteKit is simple, I don't need a skill" Physics bitmasks default to 0xFFFFFFFF and cause phantom collisions. The bitmask checklist catches this in 2 min.
"I'll just use SKShapeNode, it's quick" Each SKShapeNode is a separate draw call. 50 of them = 50 draw calls. axiom-spritekit has the pre-render-to-texture pattern.
"I can figure out the coordinate system" SpriteKit uses bottom-left origin (opposite of UIKit). Anchor points add another layer. axiom-spritekit-diag Symptom 6 resolves in 5 min.
"Physics is straightforward" Three different bitmask properties, modification rules inside callbacks, and tunneling edge cases. axiom-spritekit Section 3 covers all gotchas.
"The performance is fine on my device" Performance varies dramatically across devices. axiom-spritekit Section 6 has the debug overlay checklist.
"SceneKit is fine for our new project" SceneKit is soft-deprecated iOS 26. No new features, only security patches. axiom-scenekit has the migration decision tree.
"I'll learn RealityKit later" Every line of SceneKit is migration debt. axiom-scenekit-ref has the concept mapping table so the transition is concrete, not abstract.
"ECS is overkill for a simple 3D app" You're already using ECS — Entity + ModelComponent. axiom-realitykit shows how to scale from simple to complex.
"I don't need collision shapes for taps" RealityKit gestures require CollisionComponent. axiom-realitykit-diag diagnoses this in 2 min vs 30 min guessing.
"I'll just use a Timer for game updates" Timer-based updates miss frames and aren't synchronized with rendering. axiom-realitykit has the System pattern.
Critical Patterns
axiom-spritekit:
-
PhysicsCategory struct with explicit bitmasks (default 0xFFFFFFFF causes phantom collisions)
-
Camera node pattern for viewport + HUD separation
-
SKShapeNode pre-render-to-texture conversion
-
[weak self] in all SKAction.run closures
-
Delta time with spiral-of-death clamping
axiom-spritekit-ref:
-
Complete node type table (16 types with batching behavior)
-
Physics body creation methods (circle cheapest, texture most expensive)
-
Full action catalog with composition patterns
-
SKView debug overlays and scale mode matrix
axiom-spritekit-diag:
-
5-step bitmask checklist (2 min vs 30-120 min guessing)
-
Debug overlays as mandatory first diagnostic step
-
Tunneling prevention flowchart
-
Memory growth diagnosis via showsNodeCount trending
axiom-scenekit:
-
Migration decision tree (new project → RealityKit, existing → maintain or migrate)
-
USDZ asset conversion before migration (xcrun scntool )
-
SceneView deprecation and SCNViewRepresentable replacement
-
Pressure scenarios for "just use SceneKit" rationalization
axiom-scenekit-ref:
-
Complete SceneKit → RealityKit concept mapping table
-
All material lighting models and properties
-
Full constraint catalog
axiom-realitykit:
-
ECS mental shift table (scene graph thinking → ECS thinking)
-
Custom component registration (registerComponent() )
-
Read-modify-write pattern for component updates
-
CollisionComponent required for all interaction
-
System-based updates instead of timers
axiom-realitykit-ref:
-
Complete component catalog with all properties
-
MeshResource generators and ShapeResource types
-
Scene events catalog
-
Material system with all PBR properties
axiom-realitykit-diag:
-
Entity visibility checklist (8 branches, 2-5 min vs 30-60 min)
-
Gesture debugging (CollisionComponent first check)
-
Performance diagnosis (entity count, resource sharing, component churn)
-
Physics constraint: entities must share an anchor
Example Invocations
User: "I'm building a SpriteKit game" → Invoke: /skill axiom-spritekit
User: "My physics contacts aren't firing" → Invoke: /skill axiom-spritekit-diag
User: "How do I create a physics body from a texture?" → Invoke: /skill axiom-spritekit-ref
User: "Frame rate is dropping in my game" → Invoke: /skill axiom-spritekit-diag
User: "How do I set up SpriteKit with SwiftUI?" → Invoke: /skill axiom-spritekit
User: "What action types are available?" → Invoke: /skill axiom-spritekit-ref
User: "Objects pass through walls" → Invoke: /skill axiom-spritekit-diag
User: "I need to build a 3D game" → Invoke: /skill axiom-realitykit
User: "How do I add a 3D model to my SwiftUI app?" → Invoke: /skill axiom-realitykit
User: "My RealityKit entity isn't showing up" → Invoke: /skill axiom-realitykit-diag
User: "How do I set up physics in RealityKit?" → Invoke: /skill axiom-realitykit-ref
User: "I'm migrating from SceneKit to RealityKit" → Invoke: /skill axiom-scenekit
- /skill axiom-scenekit-ref
User: "What's the RealityKit equivalent of SCNNode?" → Invoke: /skill axiom-scenekit-ref
User: "Should I use SceneKit for my new 3D project?" → Invoke: /skill axiom-scenekit
User: "Tap gestures don't work on my RealityKit entity" → Invoke: /skill axiom-realitykit-diag
User: "How do I set up ECS in RealityKit?" → Invoke: /skill axiom-realitykit
User: "My AR content isn't tracking" → Invoke: /skill axiom-realitykit-diag
User: "What materials are available in RealityKit?" → Invoke: /skill axiom-realitykit-ref
User: "How do I animate entities in RealityKit?" → Invoke: /skill axiom-realitykit-ref
User: "Memory keeps growing during gameplay" → Invoke: /skill axiom-spritekit-diag
User: "What particle emitter settings should I use for fire?" → Invoke: /skill axiom-spritekit-ref
User: "Can you scan my SpriteKit code for common issues?" → Invoke: spritekit-auditor agent