功能演示

可移除的能力演示目录,以及删除它的分步操作。

功能演示(Showcase)标签页是一个能力目录——对模板所具备的一切做一次自助式巡览, 其设计初衷是让你能一次性删除且毫无损失。它是唯一标注为**可移除演示(Removable demo)**的功能,对多数买家而言,最先想要的就是本页底部的删除操作

权威来源:模板中的 Features/Showcase/README.md。本页与之保持一致——若两者出现分歧, 以 README(及代码)为准。

唯一规则:依赖单向流动

核心永不引用任何 Showcase 类型。Showcase 可以引用核心中的任何东西。

这是让删除得以安全进行的唯一不变量。Showcase 永远只是在自己的导航栈ShowcaseTabView)里启动核心功能视图(TodosViewUploadViewPermissionsViewReferViewAccountSecurityViewPaywallView…)。它绝不会 成为某个核心功能的唯一入口,也绝不会把控制权交给别的标签页。因为核心里没有任何东西 import 一个 Showcase 类型,移除该模块也就不可能弄坏一个核心功能。

具体来说:

  • ShowcaseRoute 位于 Features/Showcase/而非 Navigation/MainRoute.swiftMainShellView 挂载 ShowcaseTabView(onOpenMenu:),本身持有任何 Showcase 导航状态。
  • 当你新增一个演示时,只需触碰三处 Showcase 本地位置——一个 ShowcaseRoute case、 一个 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分区标题:foundationauthenticationbackendDatacommercegrowthoperations
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() 辅助方法、传给 HomeViewonOpenShowcase: 参数,以及 routePendingDeepLink() 里的 .showcase 分支。
  • Features/Home/HomeView.swift——围栏式的 // MARK: Showcase promo 块 ("Explore the components" CTA、capabilityChips 视图及其 CapabilityChip 类型 + capabilityChipItems 数组)以及 onOpenShowcase 属性。首页在其余方面是独立的——它的 磁贴用的是首页本地列表,而非 Core/Showcase 目录。
  • Features/Main/MainShellDrawer.swift——showcaseDrawerRow
  • Core/DeepLinks/DeepLinkResolver.swift——.showcase case 与 "/showcase" 路径(.todos 深链已经路由到首页)。
  • SoarStarterSwiftTests/——删除 CapabilityCatalogTests.swiftShowcaseNavigationTests.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/——它们是 示例功能,各自可独立抵达,并非演示模块的一部分。

相关页面

On this page