Skip to content

Add a per-user macOS .pkg installer - #248

Merged
iamfatness merged 1 commit into
mainfrom
feat/macos-installer
Sep 5, 2026
Merged

Add a per-user macOS .pkg installer#248
iamfatness merged 1 commit into
mainfrom
feat/macos-installer

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

Why

The macOS artifact was a zip that a person had to unzip and hand-place into ~/Library/Application Support/obs-studio/plugins/ — a directory Finder hides by default. The owner's ask: "a much more professional and easier way for less technical people."

What

scripts/make-macos-installer.sh — takes an already signed and notarized .plugin bundle and produces a signed, notarized, stapled .pkg.

Per-user install, no admin password. A .pkg runs as root, so $HOME in a postinstall script is root's home — the classic way to silently install to the wrong place. This uses the supported mechanism instead:

<domains enable_currentUserHome="true" enable_localSystem="false" enable_anywhere="false"/>

with a relative --install-location that resolves against the chosen domain root.

Signed with Developer ID Installer — a different certificate from the Application one that signs the bundle.

Verified by actually installing it

Not by inspection:

Check Result
Install location /Users/jwallace/… — user home, not root's, not system-wide
Admin password none required
codesign --verify --strict after install valid
stapler validate after install ticket survived the pkg round-trip
spctl --assess source=Notarized Developer ID
Contents 613 MB, engine present, tiles effect present

The ticket surviving matters: a packaging step that re-copies contents carelessly can drop it, leaving testers with a bundle that needs a network check on first launch and fails offline.

Not yet verified

The GUI double-click flow — this was installed via the installer CLI, which uses the same mechanism but skips the Installer.app UI.

🤖 Generated with Claude Code

Packages the already-built, signed, notarized .plugin bundle into a
double-click .pkg using pkgbuild + productbuild, targeting the
installing user's ~/Library/Application Support/obs-studio/plugins
with no admin password (Distribution <domains
enable_currentUserHome="true" enable_localSystem="false"/> plus a
relative pkgbuild --install-location). Validates the input bundle is
present, signed, and carries its engine before packaging; refuses
--notarize without --sign at argument time.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@iamfatness
iamfatness merged commit 4bd6e0f into main Sep 5, 2026
13 checks passed
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