chore(dev): isolate dev binary from installed app via bundle-ID override#62
Merged
matthewod11-stack merged 1 commit intomainfrom Apr 27, 2026
Merged
chore(dev): isolate dev binary from installed app via bundle-ID override#62matthewod11-stack merged 1 commit intomainfrom
matthewod11-stack merged 1 commit intomainfrom
Conversation
The dev binary (target/debug/people-partner) and the signed installed
/Applications/People Partner.app share bundle identifier
"com.peoplepartner.app". Without intervention, every macOS Launch
Services call routes by bundle ID, so `open_application("People
Partner")` always lands on the installed app — which makes screenshots,
smoke tests, and debug sessions confusing because the wrong binary's
window comes to front. Discovered while smoke-testing #54.
This PR adds:
- `src-tauri/tauri.conf.dev.json` — minimal config with `identifier =
"com.peoplepartner.app.dev"` and `productName = "People Partner
(Dev)"`. Tauri's `--config` flag deep-merges this on top of the base
`tauri.conf.json`.
- `package.json` — new `tauri:dev` script (`tauri dev --config ...`)
and a parallel `tauri:build` for symmetry.
Verified empirically:
- `npm run tauri:dev` launches a binary whose macOS menu bar reads
"People Partner (Dev)" instead of "People Partner".
- A separate Application Support directory is created at
~/Library/Application Support/com.peoplepartner.app.dev/ — dev runs
use a fresh isolated SQLite DB and don't pollute production data
(intentional side effect; documented in CLAUDE.md).
- `cargo tauri build` still uses the base `tauri.conf.json` with the
production `com.peoplepartner.app` identifier — no impact on signed
release artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR improves the Tauri development workflow on macOS by preventing the dev-run binary from colliding with the installed/signed app in Launch Services, via a dev-only bundle identifier and product name override.
Changes:
- Add a minimal
src-tauri/tauri.conf.dev.jsonoverride config that sets a distinctidentifierandproductNamefor dev runs. - Add
tauri:devandtauri:buildnpm scripts to standardize dev/build commands (dev uses the override config).
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src-tauri/tauri.conf.dev.json | Introduces a dev-only config override to isolate the dev app identity (bundle ID/product name). |
| package.json | Adds scripts to run Tauri dev with the override config and a symmetric build script. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background
While smoke-testing #61 (surface update errors), I hit a frustrating debug loop: every screenshot showed the wrong binary's window. Root cause was that the dev build (
target/debug/people-partner) and the signed installed/Applications/People Partner.appshare"identifier": "com.peoplepartner.app". macOS Launch Services routesopen_applicationandopen -bcalls by bundle ID — so any "bring this app forward" command always lands on the installed app, leaving the dev binary's window hidden behind it.This is a recurring papercut for any future Tauri dev workflow: smoke tests, screenshot validation, manually inspecting state — all confused by the wrong window coming to front.
What this PR does
src-tauri/tauri.conf.dev.json(new, 5 lines) — minimal override applied on top of the basetauri.conf.jsonvia Tauri 2's--configflag. Sets:identifier:com.peoplepartner.app.devproductName:People Partner (Dev)package.json— newtauri:devscript invokingtauri dev --config src-tauri/tauri.conf.dev.json. Plus a paralleltauri:buildfor symmetry (production builds still use the base config — no change to signed release artifacts).Verified empirically
Ran
npm run tauri:devfrom this branch and confirmed:productNamepropagated through Cocoa NSApplication identity).~/Library/Application Support/com.peoplepartner.app.dev/(with its own fresh SQLite DB). Dev experiments don't pollute production data — intentional side effect.npm run type-checkclean.cargo tauri build(production) still resolves to the basetauri.conf.jsonwith the originalcom.peoplepartner.appidentifier — confirmed by reading the merged config; no change to signing/notarization/updater pipelines.Side effect: data isolation
Because each bundle ID gets its own Application Support dir, the dev binary now starts with a fresh, empty SQLite DB. To populate it for an interactive smoke session:
This is documented in
CLAUDE.md(gitignored, local) under the dev command rationale.Out of scope
tauri.conf.json(base/production config) — release pipeline unaffected..appbundle. That would also solve the collision but is a much larger change (and dev binaries traditionally stay raw); the override approach is sufficient.Test plan
npm run type-checkcleannpm run tauri:devlaunches with "People Partner (Dev)" in the menu bartauri.conf.jsonchanges; production build path unaffectednpm run tauri:devworks on a clean checkout (i.e. doesn't depend on local cache state)🤖 Generated with Claude Code