Skip to content

fix(release): package macOS build as a proper .app bundle#19

Merged
wct097 merged 2 commits into
mainfrom
fix/macos-app-bundle
Jun 9, 2026
Merged

fix(release): package macOS build as a proper .app bundle#19
wct097 merged 2 commits into
mainfrom
fix/macos-app-bundle

Conversation

@wct097

@wct097 wct097 commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Problem

Downloading the macOS release asset, unzipping, and double-clicking yields macOS's "choose an application to open this" prompt. The release shipped the raw single-file executable (EftViewer.Desktop) — a bare Mach-O has no .app bundle / Info.plist, so Finder/LaunchServices can't launch it by double-click.

Fix

For the osx-arm64 build, wrap the publish output in a proper EftViewer.app:

  • Contents/MacOS/ ← published binary (+x)
  • Contents/Info.plist ← generated from committed template .github/macos/Info.plist with the tag version substituted
  • archived with ditto -c -k --keepParent so the bundle structure/symlinks survive zipping (plain zip -r can mangle .app bundles)

Windows (7z) and Linux (zip) packaging are unchanged — only refactored into subshells so they no longer rely on a persistent cd.

Validation

  • release.yml parses as valid YAML
  • Substituted Info.plist parses via plistlibcom.willtyler.eftviewer, CFBundlePackageType=APPL, CFBundleExecutable=EftViewer.Desktop

Known follow-up (out of scope)

Binaries are still unsigned/unnotarized, so first launch needs right-click → Open (or xattr -dr com.apple.quarantine EftViewer.app). Code signing / notarization is tracked separately. No .icns icon yet → generic Dock icon.

🤖 Generated with Claude Code

wct097 and others added 2 commits June 9, 2026 13:16
The macOS release shipped the raw single-file executable
(EftViewer.Desktop). Double-clicking a bare Mach-O in Finder produces
the "choose an application to open this" prompt because there is no
.app bundle / Info.plist for LaunchServices to register.

Wrap the published output in EftViewer.app (Contents/MacOS + Info.plist
from a committed template) and archive it with `ditto` so the bundle
structure survives zipping. Windows and Linux packaging are unchanged.

Note: binaries remain unsigned/unnotarized, so first launch still needs
right-click -> Open (or xattr -dr com.apple.quarantine). Code signing is
tracked separately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- LSMinimumSystemVersion 11.0 -> 12.0 (actual .NET 10 macOS runtime floor;
  11.0 would advertise false Big Sur support and crash on launch there)
- Strip *.pdb from the .app bundle (debug symbols don't belong in Contents/MacOS)
- Drop the unused empty Contents/Resources dir (ditto wouldn't archive it anyway)
- Add `test -x` assertion so the job fails loudly if the executable name ever
  drifts from CFBundleExecutable instead of shipping a broken bundle

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wct097

wct097 commented Jun 9, 2026

Copy link
Copy Markdown
Owner Author

Review — isolated pass (Code Reviewer)

The change does exactly what it claims: the macOS asset becomes a double-clickable EftViewer.app with Contents/MacOS/EftViewer.Desktop matching CFBundleExecutable, archived via ditto --keepParent so the bundle survives zipping. Windows (7z) and Linux (zip) packaging are behaviorally unchanged (refactored into subshells; archives still land at repo root, matching the Upload step). Info.plist is well-formed.

No blockers. Findings addressed in follow-up commit a91cb27:

  • 🟡 LSMinimumSystemVersion 11.0 → 12.0 — verified: .NET 10 apps target macOS 12 minimum, so 11.0 advertised false Big Sur support (would crash on launch there).
  • 🟡 Strip *.pdb from the bundle — debug symbols don't belong in Contents/MacOS.
  • 💭 Dropped the unused empty Contents/Resources dir.
  • 💭 Added test -x assertion so the job fails loudly if the executable name ever drifts from CFBundleExecutable.

Out of scope (acknowledged): unsigned/unnotarized → first launch needs right-click → Open; no .icns icon yet. Both tracked separately.

(Posted as a comment — GitHub blocks self-approval.)

@wct097 wct097 merged commit f577d71 into main Jun 9, 2026
3 checks passed
@wct097 wct097 deleted the fix/macos-app-bundle branch June 9, 2026 17:23
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