删除 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。
3.9 KiB
3.9 KiB
0004 只保留 Web,移除 Capacitor 原生壳
- 状态:已采纳
- 日期:2026-10-21
- 关联:取代 0003 原生 iOS App 与 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.ylfJSAPI),原生壳带来的能力 (状态栏配色、物理返回键、原生 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 保留。