# 2048 IOS Development

> Implement or review the native SwiftUI 2048 app, its ViewModel, persistence, accessibility, XCTest coverage, or simulator flows.

- Skill: `hoangsonww/2048-ios-development` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add hoangsonww/2048-ios-development`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hoangsonww/2048-ios-development/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: hoangsonww (https://skillmd.com/u/hoangsonww)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/hoangsonww/2048-ios-development

---


# 2048 iOS development

Read `AGENTS.md` and the native sections of `docs/architecture.md`. Keep rules and persistence orchestration in `GameViewModel.swift`; keep adaptive presentation in SwiftUI views. Preserve deterministic injection used by tests and production randomness used by the app.

Use SF Symbols for controls, accessibility labels and identifiers for interactive elements, native confirmation and sheet patterns, safe-area-aware layout, Dynamic Type resilience, and reduced-motion behavior where animation exists. Do not replace system icons with text glyphs.

Never place the board inside a `ScrollView`. A scroll view's pan is a UIKit recogniser and outranks the board's SwiftUI `DragGesture`, so vertical swipes stop reaching the game entirely — and neither `.highPriorityGesture` nor `.scrollBounceBehavior` changes that. The layout is sized to fit, with `ViewThatFits(in: .vertical)` as the fallback; if you add vertical content, keep the static branch fitting and confirm `app.scrollViews` stays empty.

Add focused XCTest coverage for rules/state changes and XCUITest coverage for user-visible flows. Run `make test-ios`; set `IOS_SIMULATOR_ID` when a specific simulator is required. `make ios-run` builds, installs, and launches on a resolved simulator without opening Xcode. Inspect launch, gameplay, help, restart, win, and game-over states for visible changes.

