最后更新:2026-06-27
用途:本文件是 TagLauncher 的长期工程地图。修改用户可见行为、状态模型、构建/发布入口、核心源码或 QA 入口前,应先读本文件,再读指向的真实源码。若本文件与源码不一致,以源码为准,并在同一任务内更新本文件。
/Users/ar/Projects/Taglauncher/Users/ar/Projects/Taglauncher/srcsrc/Apptag/src/build.shsrc/make_dmg.shsrc/Release/src/Scripts/src/Apptag/ApptagApp.swiftTagLauncherApp:SwiftUI App 入口。AppDelegate:菜单栏状态项、Dock 显示策略、热键注册、窗口打开、Quick Search 触发、App 生命周期。taglauncher://show:只做 AppGrid show/focus,不做 toggle;冷启动时请求会排队到初始化完成后执行;不接管原生触控板手势。ProEntitlementCenter,保证免费 / Pro / 老用户自动 Pro 状态进入全局同步快照。src/Apptag/OverlayWindowController.swiftOverlayPanel / OverlayWindowController:AppGrid 浮层窗口与显示/隐藏控制。src/Apptag/ContentView.swiftContentView:AppGrid 主界面、标签导航、编辑模式、拖拽处理、Quick Search 数据刷新、使用技巧浮层入口。appGridThemeID 并负责 AppGrid 全屏主题背景渲染。AppLibrarySnapshot 先渲染 AppGrid,再后台刷新,避免启动/重开时立刻显示转圈。ContentView 统一弹 modal 并写入 hideUsageTips / skipUsageTipsCloseReminder。src/Apptag/PreferencesView.swiftPreferencesView:设置窗口、语言、通用、主题、快捷键、标签、数据、关于等设置页。appGridThemeID,不得改变标签、排序、备注或分类数据。ProThemePreviewState.endsAt 推导的 MM:SS 倒计时;倒计时到期只退出预览,不弹阻塞提示。src/Apptag/AppGridCollectionView.swiftAppGridCollectionView:SwiftUI 到 AppKit NSCollectionView 的桥接。AppGridCollectionHostView:滚动容器、背景/使用技巧层、空白拖放处理。AppGridGroupCollectionItem / AppGridGroupCardView:分组容器、图标布局、分组标题、hover/高亮、容器内拖放。AppGridIconNSView:应用图标单元、点击、hover 气泡、拖拽起点。src/Apptag/AppGridTheme.swiftappGridThemeID。ProEntitlementConfig.freeThemes 判断,不在主题 UI 中散落规则。src/Apptag/ProEntitlement.swiftProEntitlementCenter:StoreKit 2 当前权益、购买、恢复、交易更新、离线缓存和 QA 状态注入。ProEntitlementPolicy:数据层可同步调用的 Pro 门禁;覆盖主题、导入 / 导出、备注额度和应用排序持久化。ProEntitlementConfig:一次性买断商品 ID、免费 + Pro 首个版本、免费主题集合、免费备注额度和 QA 环境变量的单一配置点。src/Apptag/ProAccessViews.swiftProStatusPill:高级功能入口的小型 Pro 胶囊;Pro / 已锁定高级功能使用金色皇冠体系,免费状态使用中性胶囊。ProUpgradePromptView:功能被锁时的统一解锁提示,购买 / 恢复动作由调用方闭包绑定。src/Apptag/AppGridSupport.swiftsrc/Apptag/TagNavigationView.swiftsrc/Apptag/AppDragCoordinator.swiftsrc/Apptag/DataLayer.swiftAppInfo:应用模型。AppDisplayNameResolver:多语言应用显示名解析。AppIndexer:扫描 /Applications 等应用来源,处理 bundle / wrapper / localized display name。TagGroup / TagColor:标签分组与颜色。TagDatabase:标签、备注、隐藏状态、分类方案、导入导出、备份和持久化。TagEditor:把数据库中的标签/备注/隐藏状态标注回扫描到的 App 列表。src/Apptag/AppLibraryController.swiftAppLibrarySnapshot,供新建 overlay 立即复用。src/Apptag/AppDefaults.swiftuseDarkAppGrid=true 在没有新 theme key 时迁移到 appGridThemeID=deepBlue。hideUsageTips 默认 false;skipUsageTipsCloseReminder 默认 false。src/Apptag/QuickSearch.swiftLauncherHotkey / LauncherHotkeyKind:主面板和 Quick Search 快捷键定义。LauncherHotkeyRegistrationStore:快捷键注册状态持久化。QuickSearchDocument / QuickSearchEngine:搜索索引与排序。QuickSearchPanelPresentationView / QuickSearchOverlayView / QuickSearchResultListHostView:Quick Search 浮层 UI 与结果列表。QuickSearchResultRowView:结果行内部文字、图标、标签区域统一命中到整行,保证点击任意可见区域都能启动并关闭浮层。src/Apptag/SmartCategorization/SmartCategory.swiftSmartCategoryDefaults.orderedIDs 是 SmartStart 默认初始化标签事实源;当前默认方案为 12 个标签。SmartCategoryID.smartStartDefaultCategoryID 负责把旧细分 catalog 分类归并到 12 个默认标签;Meeting 归入 communication,finance 和 other 返回 nil,回到未分类;这是新 SmartStart 写入前的归并,不做老用户旧标签自动迁移。src/Apptag/SmartCategorization/SmartCategorizationDraft.swiftsrc/Apptag/SmartCategorization/SmartStartService.swiftsrc/Apptag/AppleDefaultAppCatalog.swiftsrc/Apptag/SmartStartNoticeOverlay.swiftsrc/Apptag/L10n.swiftsrc/Apptag/Localization/*.jsonsmart.category.* 是 SmartStart/default system tag 的显示事实源;非英文语言不得直接复制英文初始化标签。src/Apptag/Resources/src/Docs/Requirements/src/Apptag/Info.plisttaglauncher,首期路由只支持 taglauncher://show。src/Apptag/TagLauncher.entitlementssrc/build.sh.app 的主入口。src/make_dmg.shsrc/Release/src/Scripts/macos14_availability_typecheck_qa.shsrc/Scripts/macos14_build_metadata_qa.shsrc/Scripts/apple_default_apps_resource_qa.shsrc/Scripts/apple_default_note_policy_qa.shsrc/Scripts/apple_default_note_migration_qa.shsrc/Scripts/smartstart_catalog_resource_qa.shsrc/Scripts/smart_category_localization_qa.shPDF、DevOps 等技术通用词例外。src/Scripts/smartstart_default_categories_qa.shMeeting 归入 communication、finance / other 回未分类、首次 starter tags 和关键多语言目标文案。src/Scripts/quick_search_app_name_qa.shsrc/Scripts/quick_search_system_app_qa.shsrc/Scripts/tag_navigation_hover_scroll_qa.shsrc/Scripts/tag_double_click_preferences_qa.shsrc/Scripts/theme_settings_qa.shsrc/Scripts/pro_localization_qa.shpro.* 键完整、占位符完整、无生成污染和非英文语言无英文兜底复制。src/Scripts/pro_feature_gate_qa.shsrc/Scripts/pro_theme_preview_countdown_qa.shMM:SS、到期清理、29 语种 %time% 占位符和禁止写死体验时长。src/Scripts/appgrid_startup_loading_qa.shsrc/Scripts/url_scheme_activation_qa.shtaglauncher://show 注册、AppDelegate show/focus 语义、冷启动 pending、29 语种设置文案和禁止私有触控板捕获。src/Scripts/usage_tips_qa.shsrc/Scripts/usage_tips_close_reminder_qa.shsrc/Scripts/window_logic_qa.shsrc/Scripts/app_ordering_data_qa.shsrc/ 下维护。TagDatabase 的分类/标签业务数据。appGridThemeID,排序预览不写 containerAppOrder,第 6 个新备注不写 appNotes / appNoteMetadata,导入 / 导出拦截必须早于文件面板和文件读写。originalAppVersion 早于免费 + Pro 首个版本的历史用户必须自动获得 Pro;originalPurchaseDate 只能作为版本不可判断时的兜底。useDarkAppGrid=true 必须迁移到 deepBlue 主题。ContentView 初始 allApps.isEmpty 立刻显示转圈;应先复用最近一次完整快照,并延迟显示 loading。AppInfo.displayName,内部 bundle 名只作为搜索字段。systemCategoryID 的系统标签,不能长期保留旧英文初始化标签。ContentView.swift 通常会影响 AppGrid 主流程、编辑模式、Quick Search 数据刷新或浮层层级,必须做对应 smoke。AppGridCollectionView.swift 通常会影响 AppGrid 布局、拖拽、hover、使用技巧、容器显示和性能,必须扩大视觉/交互回归。AppGridTheme.swift 必须验证全部主题、编辑模式 override、亮/暗玻璃可读性和设置页文案。DataLayer.swift 通常会影响应用扫描、显示名、标签数据、导入导出和迁移,必须补数据 QA。PreferencesView.swift 通常需要检查 29 个本地化 JSON、设置持久化和 macOS 14 UI 表现。ApptagApp.swift 或 OverlayWindowController.swift 必须回归菜单栏、Dock 图标策略、热键、窗口层级、全屏/Split View 行为。Info.plist URL Scheme 或第三方手势说明时,必须运行 url_scheme_activation_qa.sh,并确认不新增 Accessibility/Input Monitoring/private multitouch 依赖。