功能演示
可移除的能力演示目录,以及删除它的分步操作。
功能演示(Showcase)标签页是一个能力目录——对模板所具备的一切做一次自助式巡览, 其设计初衷是让你能一次性删除且毫无损失。它是唯一标注为**可移除演示(Removable demo)**的功能,对多数买家而言,最先想要的就是本页底部的删除操作。
权威来源:模板中的 Features/Showcase/README.md。本页与之保持一致——若两者出现分歧,
以 README(及代码)为准。
唯一规则:依赖单向流动
核心永不引用任何 Showcase 类型。Showcase 可以引用核心中的任何东西。
这是让删除得以安全进行的唯一不变量。Showcase 永远只是在自己的导航栈
(ShowcaseTabView)里启动核心功能视图(TodosView、UploadView、
PermissionsView、ReferView、AccountSecurityView、PaywallView…)。它绝不会
成为某个核心功能的唯一入口,也绝不会把控制权交给别的标签页。因为核心里没有任何东西
import 一个 Showcase 类型,移除该模块也就不可能弄坏一个核心功能。
具体来说:
ShowcaseRoute位于Features/Showcase/,而非Navigation/MainRoute.swift。MainShellView挂载ShowcaseTabView(onOpenMenu:),本身不持有任何 Showcase 导航状态。- 当你新增一个演示时,只需触碰三处 Showcase 本地位置——一个
ShowcaseRoutecase、 一个CapabilityCatalog条目、ShowcaseTabView里的一个目标——而绝不反向伸手去够 应用外壳。如果某个演示需要外壳能力,它会接收一个通用闭包(如onOpenMenu),而绝不是 一个 Showcase 类型。
CapabilityCatalog 数据模型
目录是数据驱动的:每一行都是 Core/Showcase/CapabilityCatalog.swift 里的一个
TemplateCapability 值,Showcase 列表和首页的"包含哪些内容"磁贴都从它渲染。新增一项
能力是一行改动——无需改动视图。
TemplateCapability(
id: "todos", // 稳定 slug,在目录中唯一
titleKey: "showcase.todos.title",
summaryKey: "showcase.todos.summary",
category: .backendData, // 分区归类
systemImage: "checklist", // SF Symbol 行图标
route: .todos, // 点按推入的 ShowcaseRoute(nil = 无演示)
status: .liveDemo // 在本次构建中的可运行程度
)配套类型:
| 类型 | 角色 |
|---|---|
TemplateCapability | 一行目录条目。仅在一处描述;每个界面都从它渲染。 |
CapabilityCategory | 分区标题:foundation、authentication、backendData、commerce、growth、operations。 |
CapabilityStatus | 每行上的可运行程度徽章(见下)。 |
CapabilityStatus 直接对应本文档通用的功能状态词汇:
| 状态 | 含义 | 徽章色 |
|---|---|---|
liveDemo | 在模拟器上完全可交互,无需配置。 | 绿 |
configured | 由构建配置驱动(如更新门的版本阈值)。 | 主题色 |
deviceOnly | 需要真机(APNs 推送、部分生物识别)。 | 橙 |
requiresKeys | 需要 Secrets.xcconfig 里的密钥(内购、分析);缺失时消费方控制器 no-op。 | 灰 |
因此像 paywall 这样的行在你加上 RevenueCat 密钥前会显示 requiresKeys,而
push-notifications 会显示 deviceOnly,因为模拟器永远拿不到 token——目录对"什么真能
跑起来"是诚实的。
如何移除 Showcase
删除演示是一次小而机械的操作。完成第 2 步后,项目仍能编译,且每个核心功能(待办、上传、 权限、推荐、账号/安全、付费墙)都仍可通过自己的入口抵达。
删除这两个文件夹
rm -rf SoarStarterSwift/Core/Showcase/
rm -rf SoarStarterSwift/Features/Showcase/删除那些围栏式接缝
每处接缝都用一条点名 Showcase 的注释标记,因而可用 grep 找到。移除:
Navigation/MainRoute.swift——MainTab里的case showcase(及其titleKey/systemImage分支)。Features/Main/MainShellView.swift——// MARK: - Showcase tab块、openShowcase()辅助方法、传给HomeView的onOpenShowcase:参数,以及routePendingDeepLink()里的.showcase分支。Features/Home/HomeView.swift——围栏式的// MARK: Showcase promo块 ("Explore the components" CTA、capabilityChips视图及其CapabilityChip类型 +capabilityChipItems数组)以及onOpenShowcase属性。首页在其余方面是独立的——它的 磁贴用的是首页本地列表,而非Core/Showcase目录。Features/Main/MainShellDrawer.swift——showcase的DrawerRow。Core/DeepLinks/DeepLinkResolver.swift——.showcasecase 与"/showcase"路径(.todos深链已经路由到首页)。SoarStarterSwiftTests/——删除CapabilityCatalogTests.swift与ShowcaseNavigationTests.swift,让测试 target 仍能编译。
(可选)移除演示指南
Features/Guide/ 只能从 Showcase 抵达。它可独立编译,但会变成死代码——若你不想要内置
指南,删掉它。
(可选)清理字符串
Localizable.xcstrings 里的 showcase.*、capabilityCategory.*、
capabilityStatus.* 和 tabs.showcase 键会变为未用。留着无害;想要干净目录可按前缀
删除。保留 tabs.todos——TodosView 在用它,且待办属于核心。
移除 Showcase 无需触碰任何核心功能、仓储、控制器或视图模型。完成第 2 步后重新构建
确认一下——xcodebuild 命令应保持绿色。
移除 Showcase 时,不要删除 Features/Todos/、Features/Upload/、
Features/Permissions/、Features/Refer/ 或 Features/Profile/——它们是
示例功能,各自可独立抵达,并非演示模块的一部分。
