Skip to content

v1.2.1: fix packaged-app crash for real (resource loading), add release smoke test - #12

Merged
adamdexter merged 1 commit into
mainfrom
claude/v1.2.1-resource-loading
Jul 3, 2026
Merged

v1.2.1: fix packaged-app crash for real (resource loading), add release smoke test#12
adamdexter merged 1 commit into
mainfrom
claude/v1.2.1-resource-loading

Conversation

@adamdexter

Copy link
Copy Markdown
Owner

⚠️ Merging auto-releases v1.2.1

v1.2.0's rename fix was necessary but not sufficient — the published v1.2.0 DMG still crashes on launch. SwiftPM's generated Bundle.module accessor for executable targets only checks the .app ROOT and a baked-in absolute build-machine path — never Contents/Resources. The baked-in fallback is also why every on-machine launch test passed, including the one that validated v1.2.0.

  • AppResources.bundle resolves the resource bundle via Bundle.main.resourceURL (works in the packaged app AND dev builds); all app code now uses it
  • Release workflow gains a release-blocking smoke test: launches the app from the built DMG with .build hidden — a crashing packaged app can never ship again
  • Docs updated; VERSION → 1.2.1

Verified locally: the packaged v1.2.1 app launches with the build directory renamed away — the exact condition under which v1.0.0–v1.2.0 crash.

After this releases, v1.2.0 will be marked as a pre-release so latest (curl installer, Releases page) points at v1.2.1.

🤖 Generated with Claude Code

… Bundle.module

v1.2.0's rename fix was necessary but not sufficient. SwiftPM's
generated Bundle.module accessor for executable targets only checks
two locations: the .app bundle ROOT (Bundle.main.bundleURL) and a
baked-in absolute path into the build machine's .build directory. It
never checks Contents/Resources, where create-dmg.sh places the
bundle — so the packaged app still crashed at launch everywhere
except the machine that built it, where the baked-in fallback path
silently succeeded. That same fallback made every on-machine launch
test pass, including the one that validated v1.2.0.

- New AppResources.bundle resolves the bundle via
  Bundle.main.resourceURL (Contents/Resources in the .app; the
  binary's directory in dev builds) with Bundle.module only as a
  last-resort fallback; all app code now goes through it
- release.yml gains a release-blocking smoke test: mount the built
  DMG and launch the app with .build hidden, so a crashing packaged
  app can never ship again
- CLAUDE.md: document the accessor behavior, forbid direct
  Bundle.module use, and require hidden-build-dir launch tests
- Bump version to 1.2.1

Verified: packaged app from the DMG launches with the build
directory renamed away (the exact condition under which v1.0.0–v1.2.0
crash).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@adamdexter
adamdexter merged commit 97f22d1 into main Jul 3, 2026
4 checks passed
@adamdexter
adamdexter deleted the claude/v1.2.1-resource-loading branch July 3, 2026 05:11
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.

1 participant