# Lingua · 灵谷 — Microsoft Store 提交清单

> 面向：COCUW
> 目标：把 v1.1.0 作为**免费应用**首次上架 Microsoft Store（x64 桌面全信任应用）
> 现状：**包已按真实身份打好并签名、文案与素材已齐、联系邮箱已填、隐私政策已托管**。剩下的是：管理员环境试装一次、走 Partner Center 流程。

---

## 一、产物在哪（已全部生成）

| 产物 | 路径 | 大小 | 用途 |
|---|---|---|---|
| MSIX 安装包 | `store/build/Lingua_1.1.0.0_x64.msix` | 3.47 MB | 本地试装、备份分发 |
| 商店上传包 | `store/build/Lingua_1.1.0.0_x64.msixupload` | 3.34 MB | **提交 Partner Center 用这个** |
| 测试证书公钥 | `store/build/Lingua-Test.cer` | 770 B | 本地试装前导入「受信任人」 |
| 打包清单 | `store/msix/AppxManifest.xml` | 2.9 KB | 改 Identity / 版本号 |
| 图标资源 | `store/msix/Assets/` | 42 个 PNG | 已内嵌在包里，无需单独上传 |
| 商店徽标 300×300 | `store/listing/StoreIcon_300.png` | — | Partner Center「商店徽标」 |
| 商店截图 1920×1080 | `store/screenshots/*.png` | 6 张 | Partner Center「屏幕截图」 |
| 一键重打包 | `store/build-msix.ps1` | — | 以后改版本 / 换身份后重出包 |
| 中英文案 | `store/listing/zh-CN.md`、`en-US.md` | — | 逐节复制粘贴 |
| 隐私政策 | `store/listing/privacy-policy-zh.md`、`-en.md`、`privacy.html` | — | 已托管，URL 见第二节 |

---

## 二、只有你能做的两件事（不做就提交不了）

### 1. 注册 Microsoft 开发者账号

- 地址：https://partner.microsoft.com/dashboard/registration
- 个人账号一次性约 **US$19**（公司账号约 $99/年），需实名 + 身份证件核验，1~3 个工作日。
- 注册完成后进入 **应用管理 → 应用标识（App identity）**，能直接复制到下面三个值。

### 2. 隐私政策公网 URL（✅ 已完成，2026-10-22）

**现成可用的地址：**

```
https://lingua-privacy.app.workbuddy.host/?sharecode=YI72KAGV3U
```

- 单文件双语页，免登录、可直接打开，内容含应用名、服务说明、联系方式，满足审核要求。
- **必须带上 `?sharecode=YI72KAGV3U`**，去掉参数会显示「链接不完整」。
- 源文件在 `store/privacy-site/index.html`（由 `store/listing/privacy.html` 复制），重发即覆盖同一链接。
- 想换成自有域名（如 `https://webdb.wangcocu.xyz/lingua/privacy`）随时可以，把 `listing/privacy.html` 传上去、在 Partner Center 替换 URL 即可，政策正文不用改。

> **这条不能省。** 包里声明了 `rescap:runFullTrust`，商店会强制把「是否访问/收集/传输个人信息」判为「是」并要求 URL；选「否」保存后会被重置，页面永远停在「未完成」。这不是 UI bug。

政策里的联系方式已填 **`wangcocu@163.com`**。审核会核对这个地址是否可达，注意别让它进垃圾箱。

---

## 三、身份三值（✅ 已替换完成，2026-10-22）

Partner Center「应用标识」给的真实值已写进 `store/msix/AppxManifest.xml`，包也按新身份重新打好、重新签过了：

| 位置 | 已填入的值 |
|---|---|
| `Identity/@Name` | `COCUWANG.Lingua` |
| `Identity/@Publisher` | `CN=AF781E62-E310-4843-8ED0-CE990E5FFB6F` |
| `Properties/PublisherDisplayName` | `COCUWANG` |

包内清单已回读核对（`makeappx unpack` → 48 条目），签名主体与 `Publisher` 逐字符一致，均为 `AF781E62-…`。

> **`@Name` 必须取自 Partner Center「应用标识」页，不能自己编。**
> 曾一度用开发者账号哈希 `COCUWANG.3289538410EF`，商店回执两条错误：
> 「无效的软件包标识名称」与「无效的软件包系列名称」。
> 包系列名 = `Name` + `_` + `Publisher 的哈希`，所以 Name 一错，系列名跟着错。
> 本应用的正确组合是 **`COCUWANG.Lingua_mmke2k3kd9fw`**。

> `Publisher` 只要差一个字符，商店就会以 `0x80073CF3` 拒包；同理本地自签名证书的 Subject 也必须等于它，否则试装报 `0x80073CF9`。
> `build-msix.ps1` 里的 `$certSubject` 已同步成同一个值，并加了一致性检查，不一致会当场警告。

以后改版本重新出包：

```powershell
# 先关掉正在运行的实例，否则覆盖 Lingua.exe 会报 Device or resource busy
powershell -ExecutionPolicy Bypass -File store\build-msix.ps1
```

> 提交商店其实**不要求你先签名** —— Partner Center 会用它的证书重签。本地签名只是为了自测。想跳过就加 `-SkipSign`。

---

## 四、Partner Center 提交流程

1. **新建应用** → 预留名称 `Lingua · 灵谷`（名称一旦预留，改名要重走审核）
2. **定价和可用性** → 免费；市场先只勾 **中国 + 美国**
3. **属性** → 分类「效率 → 翻译」；系统要求按 `listing/zh-CN.md` 的「系统要求」表逐格填
4. **年龄分级** → 问卷全选「否」，结果应为 3+
5. **程序包** → 上传 `Lingua_1.1.0.0_x64.msixupload`
   - 上传后 Partner Center 会解析出包内信息。**核对它显示的包标识是否与第三步填的一致**
   - 若提示「包标识与预留名称不匹配」，说明第二节的三值没换干净
6. **商店列表** → 逐个语言粘贴 `listing/zh-CN.md` / `listing/en-US.md` 对应章节
   - 上传商店徽标 `StoreIcon_300.png`
   - 上传 6 张截图（顺序建议 01→06，第一张最重要）
7. **提交审核** → 认证一般 24~72 小时

### 截图顺序（已在 `store/screenshots/` 按序号命名）

| 序号 | 文件 | 展示内容 |
|---|---|---|
| 1 | `01-main-en-zh.png` | 主界面：英文长句 → 中文结果，默认语言对（**首图，别换**） |
| 2 | `02-image-ocr.png` | 截图拖入 → 本机识别（「已识别 4 行 · 68ms」）→ 直接出译文 |
| 3 | `03-suggest.png` | 英文输入联想候选浮层 |
| 4 | `04-longtext.png` | 长文分段 + 字数计数（B站引擎 3000 字/段） |
| 5 | `05-settings.png` | 设置页一屏（MyMemory / B站引擎，均无需密钥） |
| 6 | `06-light.png` | 浅色主题 |
| 7 | `07-capsule.png` | 悬浮胶囊 + 面板组合 |

---

## 五、`runFullTrust` 权限说明（审核会看，直接粘贴）

提交时「受限功能」一栏需要填写理由，用这段：

```
This is a Win32 desktop application (Tauri) packaged as MSIX with
Windows.FullTrustApplication. It requires runFullTrust because it:
  (1) registers a global hotkey (Ctrl+Alt+T) via RegisterHotKey to show/hide
      its own translation panel;
  (2) reads the clipboard only when the user explicitly clicks "Paste";
  (3) writes its settings to %APPDATA%\Lingua\config.json.
No files outside its own settings folder are read or modified. No network
access beyond HTTPS requests to the user-selected translation engine.
```

---

## 六、本地试装（可选，但建议做一遍）

需要管理员权限，因为要把自签名证书装进机器信任存储：

1. 双击 `store/build/Lingua-Test.cer` → 安装证书 → 存储位置选「**本地计算机**」→ 浏览 → 「**受信任人**」→ 完成
2. 管理员 PowerShell：

```powershell
Add-AppxPackage -Path "D:\文档\工作项目\AI项目\Translation\store\build\Lingua_1.1.0.0_x64.msix"
```

3. 从开始菜单搜「Lingua」启动，确认：面板正常出、胶囊置顶、热键生效、翻译出结果
4. 卸载：

```powershell
Get-AppxPackage *Lingua* | Remove-AppxPackage
```

> 我这台机器不是管理员，装不了机器级信任，所以**试装这一步只能你来做**。包结构与签名已用 `makeappx unpack` 回读 + `signtool` 校验过，是完整合规的 MSIX（48 个条目：44 个载荷 + 清单 + blockmap + content types + 签名）。

---

## 七、已知风险与应对

| 风险 | 影响 | 应对 |
|---|---|---|
| **配置不互通** | MSIX 版把 `%APPDATA%` 重定向到包容器内，绿色版里保存的引擎选择/窗口尺寸不会自动带过去 | 首次启动重新选一次；这是 MSIX 的正常行为，不修 |
| **无 WebView2 的极老系统** | 启动即闪退，用户只看到「点不开」 | 清单下限已卡到 Win10 2004（19041）；文案里已注明依赖 |
| **窗口不在任务栏** | 审核员可能疑惑「应用开了但找不到窗口」 | 提交「测试说明」里写明：启动即在屏幕右侧显示悬浮胶囊 + 面板，`skipTaskbar` 是产品设计（胶囊常驻） |
| **无边框透明窗口** | 部分截图工具抓不到内容，审核若要求截图需注意 | 我们提供的 6 张截图是用同一份 HTML 源渲染的，与实机一致 |
| **单实例互斥体** | 绿色版与商店版同时运行时互斥体同名，可能互相顶掉 | 二者一般不会共存；若同时装，先退出绿色版 |
| **版本号只升不降** | 商店拒绝同号或降号重传 | 每次提交至少把第四位 +1（`1.1.0.0` → `1.1.0.1`）；用 `-Version 1.1.0.1` 打 |

---

## 八、上架之后

- **改版本**：改 `tauri.conf.json` / `Cargo.toml` / `package.json` 三处版本 → 重新编译 → `build-msix.ps1 -Version x.y.z` → 上传新的 `.msixupload`
- **看数据**：Partner Center「分析」里有获取量、崩溃率、评价。免费应用没有收入面板
- **回复评价**：中文区用户常提「免费额度不够」，可直接引导切到 B站引擎（每段 3000 字，文案里已铺垫）

---

## 九、现在差什么

包这边**已经没有待办了** —— 身份是真的（`COCUWANG.Lingua` / `CN=AF781E62-…`，系列名 `COCUWANG.Lingua_mmke2k3kd9fw`）、签名的主体与包身份一致、48 个条目完整、文案和图齐全、联系邮箱已填 `wangcocu@163.com`。剩下两件纯外部的事：

1. **管理员环境试装一次**（第六节），确认实机能跑
2. **管理员环境试装一次**（第六节），确认实机能跑

这两件做完，直接上传 `store/build/Lingua_1.1.0.0_x64.msixupload` 就能提交审核。
