refactor: 只保留 Web,移除 Capacitor 原生壳

删除 android/、ios/ 两个 Capacitor 原生工程与 capacitor.config.ts、
ionic.config.json,以及 scripts/android、scripts/ios.sh 构建脚本;
根与 apps/web 的 @capacitor/* 依赖和相关 npm scripts 一并移除。

Web 侧去掉原生分支:登录只走云乐坊容器授权面板或顶层重定向,
暗色模式不再改原生状态栏,移除 Android 物理返回键处理。

保留 @nuxtjs/ionic(Web UI 框架)、云乐坊 window.ylf 桥接与 PWA。

决策记录见 docs/decisions/0004-web-only.md。
This commit is contained in:
toor
2026-10-21 12:27:50 +08:00
committed by trae-solo-agent
parent 8ded87a3a8
commit 76a5d71252
117 changed files with 204 additions and 3023 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
# 0003 原生 iOS App 与 monorepo 结构
- 状态:已采纳
- 状态:被 [0004 只保留 Web,移除 Capacitor 原生壳](./0004-web-only) 取代
- 日期:2026-10-18
- 关联:调整 [#98](https://github.com/YunYouJun/cook/issues/98) 的阶段 4
@@ -68,4 +68,4 @@ docs/ 不变
- iOS 开发、构建和 UI 调试需要 macOS + Xcode 26,云端环境只能写代码和跑纯 Swift / TS 测试。
- 推荐逻辑的改动成本变成两份,靠共享用例兜底;核心逻辑应尽量保持小而纯。
- 搬迁会和进行中的 PR 冲突,需要等它们合并后再开始,且搬迁 PR 要尽快合并。
- 打磨计划和验收标准见 [iOS App 打磨目标](/dev/ios-roadmap)。
- 打磨计划和验收标准见 iOS App 打磨目标(该计划已随 [0004](/decisions/0004-web-only) 作废)。
+62
View File
@@ -0,0 +1,62 @@
# 0004 只保留 Web,移除 Capacitor 原生壳
- 状态:已采纳
- 日期:2026-10-21
- 关联:取代 [0003 原生 iOS App 与 monorepo 结构](./0003-native-ios-monorepo)
## 背景
- 仓库同时维护着三套东西:Nuxt Web 应用、Capacitor 的 iOS 壳、Capacitor 的 Android 壳。
- Capacitor 依赖比想象中深:登录走原生浏览器 + 原生回调 URL,暗色模式改原生状态栏,Android 有物理返回键处理,
SSO 事务存在 `Preferences` 里。为此多出了 `nativeSso.ts`、`createNativeYunlefunAuthorizationAdapter`、
`resolveYunlefunSsoConfig` 的 `platform` 分支,以及 6 个只为原生分支存在的测试文件。
- 0003 决定用 SwiftUI 原生版替换 Capacitor 版,把 iOS 当作要上架收费的主力。但 SwiftUI 工程
(`apps/ios`)至今没有开工,Capacitor 壳反而成了长期负担:每次升级 `@capacitor/*` 都要在 Web 侧
重新验证原生分支,而这些分支在浏览器里根本走不到。
- 实际使用中,Web 版已经同时服务普通浏览器和云乐坊容器(`window.ylf` JSAPI),原生壳带来的能力
(状态栏配色、物理返回键、原生 SSO 回跳)都有 Web 侧的等价实现。
## 方案对比
| 问题 | 方案 | 取舍 |
| ---------- | ---------------------------- | ------------------------------------------------------------ |
| 原生壳去留 | 保留 Capacitor iOS + Android | 两条壳都要跟 `@capacitor/*` 版本走;Web 侧原生分支长期没人跑 |
| | 只删 Android,保留 iOS | iOS 壳仍在,Capacitor 依赖无法卸掉,清理不彻底 |
| | **全部移除,只保留 Web** | 失去上架 App 与原生 SSO;换来单一代码路径和持续可维护的 Web |
## 决定
### 删除
- `android/`、`ios/` 两个 Capacitor 原生壳工程。
- `capacitor.config.ts`、根 `ionic.config.json`。
- `scripts/android/`、`scripts/ios.sh`。
- 根与 `apps/web` 的 `package.json` 里全部 `@capacitor/*` 依赖,以及 `dev:android`、`build:android`、
`dev:ios`、`ios`、`android`、`open:ios`、`open:android`、`sync` 等脚本。
### Web 侧去 Capacitor 化
- `composables/dark.ts`:只改 `meta[name="theme-color"]`,不再设置原生状态栏。
- `pages/tabs.vue`:移除 Android 物理返回键处理(浏览器自带返回,无需拦截)。
- `adapters/yunlefunAuth.ts`:删掉原生授权适配器和基于 `Preferences` 的事务存储,只保留 Web 授权适配器。
- `utils/nativeSso.ts`:整体删除。它的产物只是原生 SSO 的 PKCE 事务与回调解析,Web 端走
`@yunlefun/sso` 的顶层重定向,不需要。
- `utils/yunlefunAuth.ts` / `utils/yunlefunSsoConfig.ts`:控制器和配置解析去掉 `platform` 分支,
只保留 Web 一种形态。
- `nuxt.config.ts`:去掉 `yunlefunSsoNativeClientId` / `yunlefunSsoNativeRedirectUri`。
### 保留
- `@nuxtjs/ionic` 与 Ionic UI:Ionic 是 Web UI 框架,与 Capacitor 无关。
- `utils/yunleHost.ts` 与云乐坊容器(`window.ylf`)集成:这是 Web 被嵌入第三方 App 容器时的适配层,
和 Capacitor 无关。
- PWA 安装、Service Worker、离线能力:都是 Web 能力。
## 影响
- 不再有 iOS / Android 安装包。若之后要上架,需要另起仓库做原生工程,而不是把 Capacitor 壳捡回来。
- 云乐坊 SSO 在 Web 上继续可用:容器内走宿主授权面板,容器外走顶层重定向回到
`https://cook.yunyoujun.cn/auth/callback`。PKCE 与 HTTPS 回跳地址的约束不变。
- `docs/dev/ios-roadmap.md` 与 `docs/decisions/0003-native-ios-monorepo.md` 随之作废。
- `@nuxtjs/ionic` 自身仍会传递依赖 `@capacitor/cli` / `@capacitor/core`(构建期使用,运行时不会调用),
`pnpm-workspace.yaml` 里对应的 override 保留。
+6 -5
View File
@@ -10,8 +10,9 @@
## 列表
| 编号 | 标题 | 状态 |
| ---------------------------------- | --------------------------------- | ------ |
| [0001](./0001-recipe-data) | 菜谱数据的来源、质量与反馈闭环 | 提议中 |
| [0002](./0002-feedback-and-ids) | 菜谱固定 id、应用内反馈与筛选信号 | 已采纳 |
| [0003](./0003-native-ios-monorepo) | 原生 iOS App 与 monorepo 结构 | 已采纳 |
| 编号 | 标题 | 状态 |
| ---------------------------------- | --------------------------------- | ------------ |
| [0001](./0001-recipe-data) | 菜谱数据的来源、质量与反馈闭环 | 提议中 |
| [0002](./0002-feedback-and-ids) | 菜谱固定 id、应用内反馈与筛选信号 | 已采纳 |
| [0003](./0003-native-ios-monorepo) | 原生 iOS App 与 monorepo 结构 | 被 0004 取代 |
| [0004](./0004-web-only) | 只保留 Web,移除 Capacitor 原生壳 | 已采纳 |