Skip to content

feat(build): add Mac App Store (mas) target alongside Developer ID#20

Merged
julia-kafarska merged 1 commit into
mainfrom
feat/mac-app-store-target
Jun 21, 2026
Merged

feat(build): add Mac App Store (mas) target alongside Developer ID#20
julia-kafarska merged 1 commit into
mainfrom
feat/mac-app-store-target

Conversation

@julia-kafarska

@julia-kafarska julia-kafarska commented Jun 21, 2026

Copy link
Copy Markdown
Member

What

Adds a sandboxed Mac App Store build path without disturbing the existing DMG / Developer ID distribution. Both channels build from the same config.

Changes

electron-builder.json

  • mas: sign the app with the Apple Distribution identity and reference the embedded provisioning profile (build-resources/embedded.provisionprofile). The installer cert (3rd Party Mac Developer Installer) is auto-detected — electron-builder 26 exposes no field for it. App Sandbox entitlements (entitlements.mas.plist + .inherit.plist) were already in place.
  • Removed the redundant ffmpeg-static extraResources copy. The app runs the asarUnpack'd binary (which electron-builder already signs — verified TeamIdentifier=8Y2UTZ2NBZ), so this only dropped ~45 MB of unused, duplicate executable from every build.
  • appIdio.out-loud.outloud to match App Store Connect / the provisioning profile.

scripts/verify-mas-build.mjs (new)

  • Post-build smoke-test asserting the bundle is store-ready: Apple Distribution signature, App Sandbox entitlement, embedded profile w/ matching team, every nested Mach-O (incl. ffmpeg) signed + com.apple.security.inherit, codesign --verify --deep --strict, and not hardened.

package.json

  • Added verify:mas; chained it onto electron:build:mas so the build self-verifies before you ever open Transporter.

Not changed (already correct)

  • Auto-update: the app uses a custom GitHub-releases poller, not electron-updater, and it's already disabled under process.mas — no change needed.
  • The Developer ID / DMG signing, notarization flow, and entitlements are untouched apart from the shared appId.

Before merging / releasing

  1. Place the profile at build-resources/embedded.provisionprofile.
  2. Confirm App Store Connect is registered under io.out-loud.outloud.
  3. npm run electron:build:mas.pkg in releases/macos/ (self-verifies).
  4. Install the .pkg locally and confirm mp3 export / speed-change work under the real sandbox, then upload via Transporter.

⚠️ The appId change affects the DMG channel's app identity too — existing DMG users' app data/update continuity resets. This was an intentional, explicitly-approved decision.

Adds a sandboxed Mac App Store build path without disturbing the existing
DMG / Developer ID distribution.

- electron-builder.json:
  - mas: sign the app with the Apple Distribution identity and reference the
    embedded provisioning profile (installer cert is auto-detected). App
    Sandbox entitlements were already present.
  - drop the redundant ffmpeg-static extraResources copy — the app runs the
    asarUnpack'd binary (which electron-builder already signs), so this only
    removed ~45MB of unused, duplicate executable from every build.
  - appId -> io.out-loud.outloud to match App Store Connect / the profile.
- scripts/verify-mas-build.mjs: post-build smoke-test asserting the bundle is
  store-ready (Apple Distribution signature, App Sandbox, embedded profile,
  every nested Mach-O incl. ffmpeg signed + com.apple.security.inherit,
  codesign --verify --deep --strict, not hardened).
- package.json: add verify:mas and chain it onto electron:build:mas.

The custom GitHub-releases update poller is already disabled under MAS via
process.mas, so no auto-update changes were needed.
@julia-kafarska julia-kafarska merged commit 2c59322 into main Jun 21, 2026
1 check passed
@julia-kafarska julia-kafarska deleted the feat/mac-app-store-target branch June 21, 2026 10:18
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