Ariver
2026-06-04 3fecf01a4c6c8e84dff785945644ad6c01c6db40
Use App Store bundle identifier
5 files modified
23 ■■■■ changed files
privatevoice.src/build/config.yml 2 ●●● patch | view | raw | blame | history
privatevoice.src/build/darwin/Info.plist 2 ●●● patch | view | raw | blame | history
privatevoice.src/internal/startup/startup_darwin.go 4 ●●●● patch | view | raw | blame | history
privatevoice.src/scripts/build-macappstore-pkg-macos.sh 13 ●●●●● patch | view | raw | blame | history
privatevoice.src/scripts/build-release-macos.sh 2 ●●● patch | view | raw | blame | history
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."
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>
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"}
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"
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)"