From 325436a7009d25024c90c3810bf0611c7709d000 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 04 Jun 2026 23:59:30 +0800
Subject: [PATCH] Record App Store category rebuild

---
 02-P-NBL/freeze/20260604-mac-app-store-category-hotfix.md                                |   35 +++++++++++
 Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/RELEASE_MANIFEST.md             |   69 +++++++++++++++++++++++
 Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/SHA256SUMS.txt                  |    1 
 Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/APP_STORE_CONNECT_SUBMISSION.md |   34 +++++++++++
 4 files changed, 139 insertions(+), 0 deletions(-)

diff --git a/02-P-NBL/freeze/20260604-mac-app-store-category-hotfix.md b/02-P-NBL/freeze/20260604-mac-app-store-category-hotfix.md
new file mode 100644
index 0000000..9a2e1ae
--- /dev/null
+++ b/02-P-NBL/freeze/20260604-mac-app-store-category-hotfix.md
@@ -0,0 +1,35 @@
+# 2026-06-04 Mac App Store 分类键修复
+
+## 结论
+
+- 版本: `2.1.28`
+- 新 build: `20260604.2353`
+- 源码 commit: `8a3688f69230d8bad0f74a6494847f472902b6ae`
+- 修复原因: Transporter validation failed 409, 缺少 `LSApplicationCategoryType`。
+- 修复值: `public.app-category.productivity`
+
+## 产物
+
+- `/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg`
+- `/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg`
+
+SHA256:
+
+```text
+dac575491644952a84f9f8365de845f5639c132b3b1ea57f4cee4df49a3e642b  PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg
+```
+
+## 验证
+
+- `go test ./internal/startup ./internal/model ./internal/modelselection`: PASS
+- `bash -n privatevoice.src/scripts/build-macappstore-pkg-macos.sh`: PASS
+- arm64 App Store signed package build: PASS
+- x86_64 App Store signed package build: PASS
+- universal app merge and re-sign: PASS
+- `codesign -vvv --deep --strict` universal app: PASS
+- `pkgutil --check-signature` universal pkg: PASS
+- 展开 pkg 后读取 `Info.plist`,`LSApplicationCategoryType=public.app-category.productivity`: PASS
+
+## 上传提示
+
+请在 Transporter 中上传 `20260604.2353` 这个新包,不要再上传 `20260604.0049`。
diff --git a/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/APP_STORE_CONNECT_SUBMISSION.md b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/APP_STORE_CONNECT_SUBMISSION.md
new file mode 100644
index 0000000..451bfa5
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/APP_STORE_CONNECT_SUBMISSION.md
@@ -0,0 +1,34 @@
+# App Store Connect Submission Prep
+
+## Build
+
+- App: 私语输入法 / PrivateVoice Dictation
+- Bundle ID: `com.shanghai3168.privatevoicedictation`
+- Version: `2.1.28`
+- Build: `20260604.2353`
+- Platform: macOS
+- Primary category: Productivity
+- `LSApplicationCategoryType`: `public.app-category.productivity`
+- Minimum macOS for App Store sandbox build: `13.4`
+- Support URL: `https://shanghai3168.github.io/privatevoice-dictation-support/support.html`
+- Privacy Policy URL: `https://shanghai3168.github.io/privatevoice-dictation-support/privacy.html`
+
+## Current Upload Package
+
+```text
+/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg
+```
+
+This replaces the failed `20260604.0049` package. The new package contains `LSApplicationCategoryType=public.app-category.productivity` in the bundled app `Info.plist`.
+
+## Validation Evidence
+
+- Universal `arm64` + `x86_64` app executable and bundled dylibs: PASS.
+- App code signature: PASS.
+- Installer package signature: PASS.
+- Expanded package `Info.plist` category key: PASS.
+- SHA256: `dac575491644952a84f9f8365de845f5639c132b3b1ea57f4cee4df49a3e642b`.
+
+## Upload
+
+Open Transporter, drag in the package above, and click `Deliver`.
diff --git a/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/RELEASE_MANIFEST.md b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/RELEASE_MANIFEST.md
new file mode 100644
index 0000000..75da5c4
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/RELEASE_MANIFEST.md
@@ -0,0 +1,69 @@
+# Release Manifest: PrivateVoice Dictation 2.1.28 build 20260604.2353
+
+## Package Type
+
+- Type: Mac App Store signed universal upload package
+- Platform: macOS universal, `arm64` + `x86_64`
+- Signing: Apple App Store distribution signing with embedded Mac App Store provisioning profile
+- Generated at: 2026-06-04T15:57:00Z
+- Operator: Codex
+
+## Source
+
+- Repository: `/Users/ar/Projects/PrivateVoice`
+- Branch: `codex/privatevoice-freeze-2.1.25`
+- Commit: `8a3688f69230d8bad0f74a6494847f472902b6ae`
+- Version: `2.1.28`
+- Build: `20260604.2353`
+- Bundle ID: `com.shanghai3168.privatevoicedictation`
+- App Store category UTI: `public.app-category.productivity`
+
+## Scope
+
+- Fixed App Store validation failure 409 caused by missing `LSApplicationCategoryType` in the app `Info.plist`.
+- Added `LSApplicationCategoryType=public.app-category.productivity`.
+- Rebuilt the Mac App Store upload package with a new build number.
+
+## Build Commands
+
+```bash
+git diff --check -- privatevoice.src/build/darwin/Info.plist privatevoice.src/app.go
+bash -n privatevoice.src/scripts/build-macappstore-pkg-macos.sh
+go test ./internal/startup ./internal/model ./internal/modelselection
+./privatevoice.src/scripts/build-macappstore-pkg-macos.sh arm64
+./privatevoice.src/scripts/build-macappstore-pkg-macos.sh x86_64
+```
+
+The final universal app was assembled from the signed arm64 and x86_64 app bundles with `lipo`, then re-signed and packaged with `productbuild`.
+
+## Verification
+
+- `go test ./internal/startup ./internal/model ./internal/modelselection`: PASS.
+- `bash -n privatevoice.src/scripts/build-macappstore-pkg-macos.sh`: PASS.
+- `npm run build`: PASS, with existing Svelte a11y warnings in `UpdateDialog.svelte` and `ToggleSwitch.svelte`.
+- arm64 Mac App Store package build and signature verification: PASS.
+- x86_64 Mac App Store package build and signature verification: PASS.
+- Universal app executable contains `arm64` and `x86_64`: PASS.
+- Bundled `libsherpa-onnx-c-api.dylib` contains `arm64` and `x86_64`: PASS.
+- Bundled `libonnxruntime.1.24.4.dylib` contains `arm64` and `x86_64`: PASS.
+- Universal app `codesign -vvv --deep --strict`: PASS.
+- Universal package `pkgutil --check-signature`: PASS.
+- Expanded package app `Info.plist` contains `LSApplicationCategoryType=public.app-category.productivity`: PASS.
+- Release and desktop package SHA256 match: PASS.
+
+## Artifact
+
+```text
+Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg
+/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg
+```
+
+SHA256:
+
+```text
+dac575491644952a84f9f8365de845f5639c132b3b1ea57f4cee4df49a3e642b  PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg
+```
+
+## Upload Note
+
+Use the `20260604.2353` package for Transporter. Do not upload the previous `20260604.0049` package, because it is missing `LSApplicationCategoryType`.
diff --git a/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/SHA256SUMS.txt b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/SHA256SUMS.txt
new file mode 100644
index 0000000..a64f0aa
--- /dev/null
+++ b/Release/PrivateVoice-Dictation-2.1.28-build20260604.2353/SHA256SUMS.txt
@@ -0,0 +1 @@
+dac575491644952a84f9f8365de845f5639c132b3b1ea57f4cee4df49a3e642b  PrivateVoice-Dictation-2.1.28-build20260604.2353-universal-macappstore.pkg

--
Gitblit v1.9.3