Files
VoiceStudio/scripts/macos-dev-unquarantine.sh
Palash Debnath 5cab8e0149 feat: rename the product to VoiceStudio (previously OmniVoice-Studio)
Renames what users see. The app, the installers, the window title, the
docs and all 21 locales now say VoiceStudio, with "(previously
OmniVoice-Studio)" noted near the title of each doc surface so people
recognise it.

Deliberately NOT renamed, because renaming any of them silently breaks
an existing install — there is no legacy-path fallback anywhere in this
codebase:

  - bundle identifier com.debpalash.omnivoice-studio (MSI UpgradeCode,
    macOS TCC grants, managed venv, WebView localStorage, the
    single-instance lock)
  - data directories OmniVoice / .omnivoice and omnivoice.db
  - the ~150 OMNIVOICE_* environment variables
  - the X-OmniVoice-* HTTP headers (a wire protocol)
  - the published Docker image paths
  - the OmniVoice ENGINE, which is a model name and not this product

tests/test_identity_paths_survive_the_rename.py pins every one of those
so a future well-meaning sweep cannot orphan a user's library.

Linux .deb users install a new package name and should apt remove
omnivoice-studio; that note is in the changelog.
2026-08-07 01:30:58 +05:30

47 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# ──────────────────────────────────────────────────────────────────────────
# macos-dev-unquarantine.sh — strip com.apple.quarantine from a LOCAL TEST
# artifact so you can launch an unsigned dev/preview build without the
# right-click → Open dance.
#
# ⚠️ LOCAL DEVELOPMENT CONVENIENCE ONLY.
# This is NEVER a substitute for proper Developer ID signing + notarization
# of production releases. Real users must receive a signed, notarized build
# (see docs/macos-signing-verification.md) — do not ship artifacts and tell
# users to run this. Production signing is gated separately in release.yml.
#
# Usage:
# scripts/macos-dev-unquarantine.sh "path/to/VoiceStudio.app"
# scripts/macos-dev-unquarantine.sh ~/Downloads/VoiceStudio*.dmg
# scripts/macos-dev-unquarantine.sh # auto-discover newest built .app
# ──────────────────────────────────────────────────────────────────────────
set -uo pipefail
if [ "$(uname -s)" != "Darwin" ]; then
echo "macos-dev-unquarantine: not macOS — nothing to do."
exit 0
fi
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
TARGET="${1:-}"
if [ -z "$TARGET" ]; then
TARGET="$(find "$REPO_ROOT/frontend/src-tauri/target" -type d -name '*.app' -path '*/bundle/macos/*' 2>/dev/null | grep -E '/release/' | head -1)"
[ -z "$TARGET" ] && TARGET="$(find "$REPO_ROOT/frontend/src-tauri/target" -type d -name '*.app' -path '*/bundle/macos/*' 2>/dev/null | head -1)"
[ -z "$TARGET" ] && { echo "ERROR: no built .app found — pass an explicit path." >&2; exit 2; }
fi
[ -e "$TARGET" ] || { echo "ERROR: path does not exist: $TARGET" >&2; exit 2; }
echo "⚠️ DEV-ONLY: stripping com.apple.quarantine from:"
echo " $TARGET"
echo " (not a substitute for signing + notarization — see docs/macos-signing-verification.md)"
xattr -dr com.apple.quarantine "$TARGET" 2>/dev/null || true
if xattr -pr com.apple.quarantine "$TARGET" >/dev/null 2>&1; then
echo "✗ quarantine attribute still present — try: sudo xattr -dr com.apple.quarantine \"$TARGET\""
exit 1
fi
echo "✓ quarantine cleared — the unsigned build will now launch locally."