From 3fecf01a4c6c8e84dff785945644ad6c01c6db40 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 04 Jun 2026 23:29:49 +0800
Subject: [PATCH] Use App Store bundle identifier

---
 privatevoice.src/scripts/build-release-macos.sh         |    2 +-
 privatevoice.src/internal/startup/startup_darwin.go     |    4 ++--
 privatevoice.src/scripts/build-macappstore-pkg-macos.sh |   13 ++++++++++++-
 privatevoice.src/build/config.yml                       |    2 +-
 privatevoice.src/build/darwin/Info.plist                |    2 +-
 5 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/privatevoice.src/build/config.yml b/privatevoice.src/build/config.yml
index 445c3e0..02f3dcd 100755
--- a/privatevoice.src/build/config.yml
+++ b/privatevoice.src/build/config.yml
@@ -3,7 +3,7 @@
 info:
   companyName: "PrivateVoice"
   productName: "PrivateVoice Dictation"
-  productIdentifier: "com.privatevoice.input"
+  productIdentifier: "com.shanghai3168.privatevoicedictation"
   description: "Private offline voice input tool"
   copyright: "(c) 2026, PrivateVoice"
   comments: "Private. Offline."
diff --git a/privatevoice.src/build/darwin/Info.plist b/privatevoice.src/build/darwin/Info.plist
index 14af748..21eb167 100755
--- a/privatevoice.src/build/darwin/Info.plist
+++ b/privatevoice.src/build/darwin/Info.plist
@@ -7,7 +7,7 @@
     <key>CFBundleIconFile</key>
     <string>icon.icns</string>
     <key>CFBundleIdentifier</key>
-    <string>com.privatevoice.input</string>
+    <string>com.shanghai3168.privatevoicedictation</string>
     <key>CFBundleDevelopmentRegion</key>
     <string>en</string>
     <key>CFBundleName</key>
diff --git a/privatevoice.src/internal/startup/startup_darwin.go b/privatevoice.src/internal/startup/startup_darwin.go
index 4d152b3..d1aff18 100755
--- a/privatevoice.src/internal/startup/startup_darwin.go
+++ b/privatevoice.src/internal/startup/startup_darwin.go
@@ -15,7 +15,7 @@
 <plist version="1.0">
 <dict>
     <key>Label</key>
-    <string>com.privatevoice.input</string>
+    <string>com.shanghai3168.privatevoicedictation</string>
     <key>ProgramArguments</key>
     <array>
         <string>{{.ExePath}}</string>
@@ -26,7 +26,7 @@
 </plist>
 `
 
-const launchAgentID = "com.privatevoice.input"
+const launchAgentID = "com.shanghai3168.privatevoicedictation"
 
 var legacyLaunchAgentIDs = []string{"com.voicesnap.app"}
 
diff --git a/privatevoice.src/scripts/build-macappstore-pkg-macos.sh b/privatevoice.src/scripts/build-macappstore-pkg-macos.sh
index e048971..bcac3de 100755
--- a/privatevoice.src/scripts/build-macappstore-pkg-macos.sh
+++ b/privatevoice.src/scripts/build-macappstore-pkg-macos.sh
@@ -15,7 +15,7 @@
 #     Example: "3rd Party Mac Developer Installer: Example Team (TEAMID)"
 #
 #   PRIVATEVOICE_APPSTORE_PROVISIONING_PROFILE
-#     Path to the Mac App Store provisioning profile for com.privatevoice.input.
+#     Path to the Mac App Store provisioning profile for com.shanghai3168.privatevoicedictation.
 #
 # Optional environment:
 #   PRIVATEVOICE_SIGNING_KEYCHAIN
@@ -47,6 +47,7 @@
 
 VERSION="$(defaults read "$INFO_PLIST" CFBundleShortVersionString 2>/dev/null || echo "2.1.0")"
 BUILD_ID="$(defaults read "$INFO_PLIST" CFBundleVersion 2>/dev/null || date +%Y%m%d.%H%M)"
+BUNDLE_ID="$(defaults read "$INFO_PLIST" CFBundleIdentifier 2>/dev/null || echo "")"
 
 step() {
   echo ""
@@ -129,6 +130,7 @@
 [[ -n "$APPSTORE_PROVISIONING_PROFILE" ]] || fail "PRIVATEVOICE_APPSTORE_PROVISIONING_PROFILE is required"
 [[ -f "$APPSTORE_PROVISIONING_PROFILE" ]] || fail "Provisioning profile not found: $APPSTORE_PROVISIONING_PROFILE"
 [[ -f "$INFO_PLIST" ]] || fail "Info.plist not found at $INFO_PLIST"
+[[ -n "$BUNDLE_ID" ]] || fail "CFBundleIdentifier is missing from $INFO_PLIST"
 [[ -f "$ENTITLEMENTS" ]] || fail "App Store entitlements not found at $ENTITLEMENTS"
 [[ -f "$PROJECT_DIR/build/darwin/icon.icns" ]] || fail "icon.icns not found"
 [[ -d "$SHERPA_LIB_DIR" ]] || fail "sherpa-onnx dylibs not found at $SHERPA_LIB_DIR"
@@ -142,6 +144,15 @@
 command -v productbuild >/dev/null || fail "productbuild not found"
 command -v pkgutil >/dev/null || fail "pkgutil not found"
 
+PROFILE_PLIST="$(mktemp)"
+trap 'rm -f "$PROFILE_PLIST"' EXIT
+security cms -D -i "$APPSTORE_PROVISIONING_PROFILE" >"$PROFILE_PLIST" ||
+  fail "Unable to decode provisioning profile: $APPSTORE_PROVISIONING_PROFILE"
+PROFILE_APP_IDENTIFIER="$(/usr/libexec/PlistBuddy -c "Print :Entitlements:com.apple.application-identifier" "$PROFILE_PLIST" 2>/dev/null || true)"
+PROFILE_BUNDLE_ID="${PROFILE_APP_IDENTIFIER#*.}"
+[[ "$PROFILE_BUNDLE_ID" == "$BUNDLE_ID" ]] ||
+  fail "Provisioning profile bundle ID mismatch: profile has $PROFILE_BUNDLE_ID, app has $BUNDLE_ID"
+
 step "Cleaning old Mac App Store build"
 rm -rf "$BUILD_DIR"
 mkdir -p "$BUILD_DIR"
diff --git a/privatevoice.src/scripts/build-release-macos.sh b/privatevoice.src/scripts/build-release-macos.sh
index 6968535..38b0b18 100755
--- a/privatevoice.src/scripts/build-release-macos.sh
+++ b/privatevoice.src/scripts/build-release-macos.sh
@@ -20,7 +20,7 @@
 KEYCHAIN_PROFILE="privatevoice"
 
 APP_NAME="PrivateVoice Dictation"
-BUNDLE_ID="com.privatevoice.input"
+BUNDLE_ID="com.shanghai3168.privatevoicedictation"
 
 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
 PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"

--
Gitblit v1.9.3