Ariver
2026-06-04 cb0259e3176109d437be4ff941016fe7eb37022c
Record App Store upload package
4 files modified
159 ■■■■ changed files
02-P-NBL/freeze/20260604-mac-app-store-release-freeze.md 54 ●●●● patch | view | raw | blame | history
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/APP_STORE_CONNECT_SUBMISSION.md 35 ●●●●● patch | view | raw | blame | history
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/RELEASE_MANIFEST.md 69 ●●●● patch | view | raw | blame | history
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/SHA256SUMS.txt 1 ●●●● patch | view | raw | blame | history
02-P-NBL/freeze/20260604-mac-app-store-release-freeze.md
@@ -5,59 +5,61 @@
- 冻结版本: `2.1.28`
- build: `20260604.0049`
- 分支: `codex/privatevoice-freeze-2.1.25`
- 源码冻结 commit: `9d3d275dca8e8dc442eb04434c8bd0fdad79bc04`
- release tag: `v2.1.28-build20260604.0049`
- 原始源码冻结 commit: `9d3d275dca8e8dc442eb04434c8bd0fdad79bc04`
- App Store 上传源码 commit: `3fecf01a4c6c8e84dff785945644ad6c01c6db40`
- 原始 release tag: `v2.1.28-build20260604.0049`
- App Store 上传冻结 tag: `v2.1.28-build20260604.0049-appstore-upload`
- release 记录目录: `Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/`
## 已完成
- 版本号和 build 编号已同步到 Go 常量、macOS `Info.plist`、Wails 配置、Windows manifest、前端 package 和关于页兜底版本。
- Bundle ID 已按正式 App Store profile 统一为 `com.shanghai3168.privatevoicedictation`。
- 已补充 Mac App Store `.pkg` 构建脚本: `privatevoice.src/scripts/build-macappstore-pkg-macos.sh`。
- 已补充 Mac App Store `.pkg` 构建脚本的 provisioning profile 与 Bundle ID 一致性校验。
- 已准备 App Store Connect 元数据草稿、隐私问卷建议、审核备注和上传命令: `Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/APP_STORE_CONNECT_SUBMISSION.md`。
- 已生成本地 App Store sandbox POC DMG:
  `Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice Dictation-2.1.28-build20260604.0049-arm64-appstore-sandbox-poc.dmg`。
- 已补生成 Intel x86_64 本地 App Store sandbox POC DMG:
  `Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice Dictation-2.1.28-build20260604.0049-x86_64-appstore-sandbox-poc.dmg`。
- 已生成正式上传用签名通用 `.pkg`:
  `Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg`。
- 已复制正式上传包到桌面上架目录:
  `/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg`。
- arm64 SHA256: `fcef2154aab52224f55874ea865d6a08efe71a2d09768d7fbc8858d319a64024`。
- x86_64 SHA256: `899bf95f579455794f9cffbadc33d1e90dbba4b6fc1b3d237229115691373606`。
- universal macappstore pkg SHA256: `84dc2bc2f6b38762e6f72f152603f831d2a3e515ca772c0b8f5e11dabedbb579`。
## 验证
- `git diff --check`: PASS
- `bash -n privatevoice.src/scripts/build-macappstore-pkg-macos.sh`: PASS
- `npm run build`: PASS,只有既有 Svelte a11y warning
- `go test ./... -count=1`: PASS
- `go test ./internal/startup ./internal/model ./internal/modelselection`: PASS
- `./scripts/build-appstore-macos.sh arm64`: PASS
- `./scripts/build-appstore-macos.sh x86_64`: PASS
- Apple App Store app signing identity: PASS
- Apple Installer signing identity: PASS
- Apple WWDR G3 intermediate certificate: PASS
- provisioning profile App ID `CR3J54M8BQ.com.shanghai3168.privatevoicedictation` 与 app `CFBundleIdentifier` 匹配: PASS
- 正式上传 `.pkg` 的 app 主程序、`libsherpa-onnx-c-api.dylib`、`libonnxruntime.1.24.4.dylib` 均包含 `arm64` + `x86_64`: PASS
- `codesign -vvv --deep --strict` 正式上传 app: PASS
- `pkgutil --check-signature` 正式上传 `.pkg`: PASS
- `shasum -a 256 -c SHA256SUMS.txt`: PASS
- App Store sandbox POC DMG `hdiutil verify`: arm64 PASS,x86_64 PASS
- DMG 挂载内容包含 `.app` 和 `Applications` 链接: arm64 PASS,x86_64 PASS
- 包内版本为 `2.1.28 (build 20260604.0049)`: arm64 PASS,x86_64 PASS
- 包内包含 `en.lproj` 和 `zh-Hans.lproj` 本地化资源: arm64 PASS,x86_64 PASS
- x86_64 主程序架构为 `Mach-O 64-bit executable x86_64`: PASS
## 等待用户/外部环境
## 上传方式
当前正在等待用户提供或安装 Apple 发布环境,原因是本机没有 Mac App Store 上传所需的 Apple 分发证书、Installer 证书和 provisioning profile。
正式上传包已经准备好。当前不在命令行内执行 `altool --upload-app`,原因是没有在 shell 中提供 App Store Connect Apple ID 与 app-specific password;也没有可复用的命令行 Transporter 登录会话。
需要用户完成:
推荐用户直接使用 Transporter:
1. 在 Apple Developer / App Store Connect 中创建或确认 bundle ID `com.privatevoice.input` 的 macOS App 记录。
2. 安装 App Store app signing identity:
   `Apple Distribution: <Team> (<TeamID>)` 或 `3rd Party Mac Developer Application: <Team> (<TeamID>)`。
3. 安装 Installer signing identity:
   `3rd Party Mac Developer Installer: <Team> (<TeamID>)`。
4. 下载 Mac App Store provisioning profile,并提供本地绝对路径。
5. 提供 App Store Connect 上传方式:Transporter 登录状态,或 altool 使用的 Apple ID / app-specific password。
收到这些信息后,下一步执行:
```bash
cd /Users/ar/Projects/PrivateVoice/privatevoice.src
PRIVATEVOICE_APPSTORE_APP_IDENTITY="Apple Distribution: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_INSTALLER_IDENTITY="3rd Party Mac Developer Installer: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_PROVISIONING_PROFILE="/absolute/path/to/profile.provisionprofile" \
  ./scripts/build-macappstore-pkg-macos.sh arm64
```
然后用 `pkgutil --check-signature`、`xcrun altool --validate-app` 或 Transporter 验证并上传生成的 `.pkg`。
1. 打开 Transporter。
2. 登录 App Store Connect 账号。
3. 拖入 `/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg`。
4. 点击 `Deliver`。
5. 回到 App Store Connect,等待 build 处理完成后选中该 build,补齐截图、隐私问卷和审核信息并提交审核。
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/APP_STORE_CONNECT_SUBMISSION.md
@@ -3,7 +3,7 @@
## Build
- App: 私语输入法 / PrivateVoice Dictation
- Bundle ID: `com.privatevoice.input`
- Bundle ID: `com.shanghai3168.privatevoicedictation`
- Version: `2.1.28`
- Build: `20260604.0049`
- Platform: macOS
@@ -19,12 +19,14 @@
- Upload tool: `xcrun altool 26.10.1`
- App Store sandbox entitlements file: `privatevoice.src/build/darwin/entitlements-appstore.plist`
- Mac App Store package script: `privatevoice.src/scripts/build-macappstore-pkg-macos.sh`
- Local blocker: this machine does not currently have Apple App Store distribution or installer identities installed.
- Apple App Store app and installer signing identities are installed.
- Mac App Store provisioning profile is installed for `com.shanghai3168.privatevoicedictation`.
- Local upload blocker remaining: App Store Connect upload credentials or an active Transporter session.
## Required Apple Account Items
1. App Store Connect app record for bundle ID `com.privatevoice.input`.
2. Mac App Store provisioning profile for `com.privatevoice.input`.
1. App Store Connect app record for bundle ID `com.shanghai3168.privatevoicedictation`.
2. Mac App Store provisioning profile for `com.shanghai3168.privatevoicedictation`.
3. App signing certificate installed in Keychain:
   - `Apple Distribution: <Team> (<TeamID>)`, or
   - legacy `3rd Party Mac Developer Application: <Team> (<TeamID>)`.
@@ -34,32 +36,21 @@
## Build Upload Package
After the Apple certificates and provisioning profile are installed:
```bash
cd /Users/ar/Projects/PrivateVoice/privatevoice.src
PRIVATEVOICE_APPSTORE_APP_IDENTITY="Apple Distribution: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_INSTALLER_IDENTITY="3rd Party Mac Developer Installer: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_PROVISIONING_PROFILE="/absolute/path/to/profile.provisionprofile" \
  ./scripts/build-macappstore-pkg-macos.sh arm64
```
Expected package path:
Current signed upload package:
```text
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/arm64/PrivateVoice-Dictation-2.1.28-build20260604.0049-arm64-macappstore.pkg
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/x86_64/PrivateVoice-Dictation-2.1.28-build20260604.0049-x86_64-macappstore.pkg
/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg
/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg
```
For Intel Mac coverage, run the same command with `x86_64` after Apple signing assets are installed. If App Store Connect requires a single upload covering both CPU families, build a universal package from the same frozen source commit instead of uploading only the arm64 package.
The package contains universal `arm64` and `x86_64` binaries for the app executable, `libsherpa-onnx-c-api.dylib`, and `libonnxruntime.1.24.4.dylib`.
Validate before upload:
```bash
pkgutil --check-signature "/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/arm64/PrivateVoice-Dictation-2.1.28-build20260604.0049-arm64-macappstore.pkg"
pkgutil --check-signature "/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg"
xcrun altool --validate-app \
  -f "/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/arm64/PrivateVoice-Dictation-2.1.28-build20260604.0049-arm64-macappstore.pkg" \
  -f "/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg" \
  -t macos \
  -u "<apple-id>" \
  -p "<app-specific-password>"
@@ -69,7 +60,7 @@
```bash
xcrun altool --upload-app \
  -f "/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/arm64/PrivateVoice-Dictation-2.1.28-build20260604.0049-arm64-macappstore.pkg" \
  -f "/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg" \
  -t macos \
  -u "<apple-id>" \
  -p "<app-specific-password>"
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/RELEASE_MANIFEST.md
@@ -2,30 +2,37 @@
## Package Type
- Type: Mac App Store release freeze / local App Store sandbox POC
- Platform: macOS arm64 and x86_64
- Signing: local code signing identity for POC only, not Apple App Store distribution signing
- Generated at: 2026-06-03T16:55:36Z
- 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
- Initial freeze generated at: 2026-06-03T16:55:36Z
- Signed upload package generated at: 2026-06-04T15:29:26Z
- Operator: Codex
## Source
- Repository: `/Users/ar/Projects/PrivateVoice`
- Branch: `codex/privatevoice-freeze-2.1.25`
- Commit: `9d3d275dca8e8dc442eb04434c8bd0fdad79bc04`
- Original release freeze commit: `9d3d275dca8e8dc442eb04434c8bd0fdad79bc04`
- App Store upload source commit: `3fecf01a4c6c8e84dff785945644ad6c01c6db40`
- Version: `2.1.28`
- Build: `20260604.0049`
- Tag: `v2.1.28-build20260604.0049`
- Original release tag: `v2.1.28-build20260604.0049`
- App Store upload freeze tag: `v2.1.28-build20260604.0049-appstore-upload`
## Scope
- Frozen code for Mac App Store release preparation.
- Frozen code for Mac App Store release preparation and final App Store upload.
- Updated all app metadata to `2.1.28` and build `20260604.0049`.
- Updated the app bundle identifier to the App Store provisioning profile bundle ID:
  `com.shanghai3168.privatevoicedictation`.
- Added Mac App Store `.pkg` build script:
  `privatevoice.src/scripts/build-macappstore-pkg-macos.sh`.
- Added provisioning-profile bundle ID preflight validation to the Mac App Store `.pkg` build script.
- Prepared App Store Connect metadata, privacy label recommendation, review notes, upload commands, and blocker list:
  `APP_STORE_CONNECT_SUBMISSION.md`.
- Built and verified local App Store sandbox POC DMGs for arm64 and x86_64 using the `appstore` Go build tag and App Sandbox entitlements.
- Built and verified signed universal Mac App Store upload `.pkg`.
## Build Commands
@@ -33,7 +40,7 @@
git diff --check
bash -n privatevoice.src/scripts/build-macappstore-pkg-macos.sh
npm run build
go test ./... -count=1
go test ./internal/startup ./internal/model ./internal/modelselection
./privatevoice.src/scripts/build-macappstore-pkg-macos.sh arm64
./privatevoice.src/scripts/build-appstore-macos.sh arm64
./privatevoice.src/scripts/build-appstore-macos.sh x86_64
@@ -46,7 +53,15 @@
- `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`.
- `go test ./... -count=1`: PASS.
- Mac App Store `.pkg` script preflight: BLOCKED as expected because Apple signing environment variables and certificates are not available locally.
- Mac App Store signing identities installed in Keychain: PASS.
- Apple WWDR G3 intermediate certificate installed and signing identities valid: PASS.
- Mac App Store provisioning profile bundle ID matches `com.shanghai3168.privatevoicedictation`: PASS.
- Signed universal Mac App Store `.pkg` built: PASS.
- Signed app `codesign -vvv --deep --strict`: PASS.
- Signed package `pkgutil --check-signature`: 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.
- App Store sandbox POC build script for arm64: PASS.
- App Store sandbox POC build script for x86_64: PASS.
- App Store sandbox POC app `Info.plist` reports `CFBundleShortVersionString=2.1.28`, `CFBundleVersion=20260604.0049`, and `LSMinimumSystemVersion=13.4` for both arm64 and x86_64: PASS.
@@ -63,6 +78,7 @@
```text
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice Dictation-2.1.28-build20260604.0049-arm64-appstore-sandbox-poc.dmg
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice Dictation-2.1.28-build20260604.0049-x86_64-appstore-sandbox-poc.dmg
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg
```
SHA256:
@@ -70,40 +86,23 @@
```text
fcef2154aab52224f55874ea865d6a08efe71a2d09768d7fbc8858d319a64024  PrivateVoice Dictation-2.1.28-build20260604.0049-arm64-appstore-sandbox-poc.dmg
899bf95f579455794f9cffbadc33d1e90dbba4b6fc1b3d237229115691373606  PrivateVoice Dictation-2.1.28-build20260604.0049-x86_64-appstore-sandbox-poc.dmg
84dc2bc2f6b38762e6f72f152603f831d2a3e515ca772c0b8f5e11dabedbb579  PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg
```
## Mac App Store Upload Blocker
## Mac App Store Upload Package
This machine does not currently have Apple App Store signing assets installed:
Signed universal upload package:
- Missing App Store app signing identity:
  `Apple Distribution: <Team> (<TeamID>)` or `3rd Party Mac Developer Application: <Team> (<TeamID>)`.
- Missing installer signing identity:
  `3rd Party Mac Developer Installer: <Team> (<TeamID>)`.
- Missing Mac App Store provisioning profile for bundle ID `com.privatevoice.input`.
- Missing App Store Connect upload credentials or Transporter session.
- `/Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg`
- `/Users/ar/Desktop/PrivateVoice-26.0604上架/02-上传包/PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg`
After those are available, run:
The app executable and bundled sherpa/onnxruntime dylibs are universal `arm64` + `x86_64`. The package signature verifies with `3rd Party Mac Developer Installer: Hainan Wanxing Technology Co., Ltd. (CR3J54M8BQ)`.
```bash
cd /Users/ar/Projects/PrivateVoice/privatevoice.src
PRIVATEVOICE_APPSTORE_APP_IDENTITY="Apple Distribution: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_INSTALLER_IDENTITY="3rd Party Mac Developer Installer: <Team> (<TeamID>)" \
PRIVATEVOICE_APPSTORE_PROVISIONING_PROFILE="/absolute/path/to/profile.provisionprofile" \
  ./scripts/build-macappstore-pkg-macos.sh arm64
```
Expected upload package:
```text
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/arm64/PrivateVoice-Dictation-2.1.28-build20260604.0049-arm64-macappstore.pkg
/Users/ar/Projects/PrivateVoice/privatevoice.src/build/macappstore/x86_64/PrivateVoice-Dictation-2.1.28-build20260604.0049-x86_64-macappstore.pkg
```
Remaining external upload requirement: App Store Connect upload credentials or an active Transporter session.
## Known Notes
- The DMG in this folder is a local sandbox POC for QA and review preparation. It is not a Mac App Store upload package.
- The App Store upload artifact must be a signed `.pkg` produced after Apple signing assets are installed.
- The DMGs in this folder are local sandbox POC artifacts for QA and review preparation. They are not Mac App Store upload packages.
- The App Store upload artifact is the signed universal `.pkg` listed above.
- Build logs include existing Svelte accessibility warnings in unrelated components.
- Build logs include the existing macOS deployment warning for `libonnxruntime.1.24.4.dylib`, which is built for macOS 14.0 while the App Store sandbox target remains macOS 13.4.
Release/PrivateVoice-Dictation-2.1.28-build20260604.0049/SHA256SUMS.txt
@@ -1,2 +1,3 @@
fcef2154aab52224f55874ea865d6a08efe71a2d09768d7fbc8858d319a64024  PrivateVoice Dictation-2.1.28-build20260604.0049-arm64-appstore-sandbox-poc.dmg
899bf95f579455794f9cffbadc33d1e90dbba4b6fc1b3d237229115691373606  PrivateVoice Dictation-2.1.28-build20260604.0049-x86_64-appstore-sandbox-poc.dmg
84dc2bc2f6b38762e6f72f152603f831d2a3e515ca772c0b8f5e11dabedbb579  PrivateVoice-Dictation-2.1.28-build20260604.0049-universal-macappstore.pkg