Skip to content

v0.1.0 — Rebuild Liar's Dice as a native iOS (Swift/SwiftUI) game - #2

Open
m5136771 wants to merge 6 commits into
mainfrom
claude/quirky-wright-lix3yh
Open

v0.1.0 — Rebuild Liar's Dice as a native iOS (Swift/SwiftUI) game#2
m5136771 wants to merge 6 commits into
mainfrom
claude/quirky-wright-lix3yh

Conversation

@m5136771

@m5136771 m5136771 commented Jun 17, 2026

Copy link
Copy Markdown
Owner

Closes out the v0.1.0 "Playable foundation" milestone: the project is rebuilt from a Python teaching CLI into a native iOS game (Swift / SwiftUI), complete and playable, with a clear line drawn between what's done (here) and what's still ahead (tracked in docs/BACKLOG.md).

What's done in this PR

  • Rules engine (LiarsDice/Engine) — Foundation-only, no UI: bids, raises, challenges, reveal/tally, dice loss, elimination, win/lose. Deterministic (injectable RNG) with a full XCTest suite.
  • Bot AI — three difficulties (Cabin Boy / Buccaneer / Sea Devil), ported and tightened from the original Python bots.
  • SwiftUI app — main menu with settings, the game table (opponents, your cup, bid steppers, challenge), the reveal, and win/lose screens, in a retro "pirate tavern" style with SwiftUI-drawn dice.
  • App icon — pixel-art bone die, generated reproducibly by tools/make_icon.py, wired into the asset catalog.
  • Sound + haptics — 8-bit chiptune SFX (tools/make_sfx.py) via AudioManager, paired with UIKit haptics through a Feedback facade; toggleable in the menu.
  • Personality preserved — pirate narration and the legendary Crazy Pete defeat sequence.
  • Tooling & docs — ready-to-open LiarsDice.xcodeproj (+ XcodeGen recovery spec, Makefile, shared scheme), the original Python game archived under python-legacy/, and docs: CHANGELOG.md, README, docs/ROADMAP.md, docs/BACKLOG.md, docs/ART_DIRECTION.md.

Done vs. in progress

  • Done: recorded in CHANGELOG.md ([0.1.0]).
  • In progress / next: docs/BACKLOG.md (prioritized) — launch-blockers are a first-run tutorial, VoiceOver accessibility, and App Store Connect setup, then art/animation polish.

Verify before merge (on a Mac, Xcode 16+)

swift test               # engine unit tests
open LiarsDice.xcodeproj # pick an iPhone sim, ⌘R

Before archiving: set your signing team and replace the placeholder bundle id com.example.liarsdice.

Note: not compiler-verified in CI — GitHub-hosted Actions runners don't provision on this account (every job, macOS and Linux, failed to allocate a runner), so build/test verification is local. Details in docs/ROADMAP.md. Squash-merge recommended to collapse the commit history (including the CI experiment) into one clean commit on main.

🤖 Generated with Claude Code

claude added 6 commits June 17, 2026 04:14
Pivot the project from a Python teaching CLI to a native iOS app targeting
the App Store.

- Pure, UI-agnostic rules engine (LiarsDice/Engine): bids, raises, challenges,
  reveal/tally, dice loss, elimination, win/lose. Deterministic via injected
  RNG and covered by unit tests (swift test).
- Bot AI with three difficulty levels, ported and tightened from the original
  Python bots.
- SwiftUI app: main menu with settings, the game table (opponents, your cup,
  bidding controls), the reveal, and win/lose screens, in a retro "pirate
  tavern" style with SwiftUI-drawn dice.
- Preserved the original's personality: pirate narration and the legendary
  Crazy Pete defeat sequence.
- Buildable Xcode project (synchronized-folder format) plus an XcodeGen
  recovery spec, a Makefile, and a shared scheme.
- Archived the original Python game under python-legacy/.
- README rewritten for the iOS app; docs/ROADMAP.md lays out the path to the
  App Store (art, sound, App Store Connect, TestFlight, review, monetization).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
Runs the engine unit tests (swift test) and compiles the SwiftUI app with
xcodebuild for the iOS Simulator on GitHub's macOS runners. This provides the
real compile/test verification that isn't possible in the Linux dev environment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
GitHub-hosted macOS runners did not provision for this repo, so the macOS
build/test jobs failed at startup. The game engine is Foundation-only Swift
with no UI, so it builds and runs its XCTest suite on a Linux Swift toolchain —
which provisions reliably and verifies the core game logic. The SwiftUI iOS app
is built locally in Xcode (the actual target platform).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
Every CI job (macOS and Linux alike) failed at startup with no runner assigned
(runner_id 0, no logs, ~2s), which indicates GitHub Actions hosted runners are
disabled or limited for this account — not a code issue. Removing the workflow
so the PR isn't perpetually red. Documented in docs/ROADMAP.md how to enable CI
later; until then the engine is verified with `swift test` and the app via an
Xcode build, both run locally.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
- App icon: pixel-art bone die with crossed bones, generated by
  tools/make_icon.py (pure stdlib PNG), wired into the asset catalog. Concept
  variants in docs/icon-concepts/.
- Audio + haptics: 8-bit chiptune SFX synthesized by tools/make_sfx.py, played
  via AudioManager (AVAudioPlayer, ambient/mix session) and paired with UIKit
  haptics through a Feedback facade. Wired into GameViewModel narration; sound
  and haptics toggles added to the main menu.
- docs/BACKLOG.md: prioritized feature backlog and user stories across launch
  and post-launch milestones.
- docs/ART_DIRECTION.md: agreed pixel-art look and feel, palette, sprite specs,
  font/audio guidance, and an asset shopping list for sourcing or commissioning.
- ROADMAP/README updated to reflect the above.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
- tools/make_icon.py: remove unused helpers (round_rect_outline, frame, the
  dropped skull sprite), an unused constant, and a stray variable. The five-pip
  render path is unchanged, so the generated PNGs are byte-identical.
- Add CHANGELOG.md recording the completed v0.1.0 "Playable foundation"
  milestone; forward-looking work stays in docs/BACKLOG.md and docs/ROADMAP.md.
- README: replace the roadmap blurb with a clear Done vs. In-progress status
  that links the changelog, backlog, roadmap, and art direction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MLyVMeLrDE5HWrv7gdWvAY
@m5136771 m5136771 changed the title Rebuild Liar's Dice as a native iOS (Swift/SwiftUI) game v0.1.0 — Rebuild Liar's Dice as a native iOS (Swift/SwiftUI) game Jul 8, 2026
@m5136771
m5136771 marked this pull request as ready for review July 8, 2026 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants