外观
整体架构
运行结构
text
CarbonFiberApp (@main)
|
+-- AppPreferences (@StateObject)
| +-- languageMode ------> L10n
| +-- appearanceMode ----> preferredColorScheme
| +-- onboardingSeen ----> UserDefaults
|
+-- RootView
+-- HomeView
+-- SettingsView
+-- AboutViewCarbonFiberApp 创建唯一的 AppPreferences 实例,并通过 SwiftUI 环境传入视图树。语言选择映射为 Locale,外观选择映射为可选 ColorScheme,因此视图只消费状态,不各自维护偏好副本。
模块职责
| 模块 | 职责 |
|---|---|
CarbonFiberApp | 创建全局偏好、注入环境、声明 iOS/macOS Scene |
AppPreferences | 语言、外观和首次运行状态的单一事实来源 |
L10n | 选择本地化 Bundle,并在缺少键时回退到英文 |
AppTheme | 提供共享颜色 token 和平台表面色 |
RootView | 顶层 Tab 和导航容器,保证设置入口可见 |
SettingsView | 修改语言、外观和首次运行状态 |
LocalJSONStore | 在 Application Support 中原子读写 Codable JSON |
数据分层
偏好数据与产品数据刻意分开:
- 用户偏好存入
UserDefaults,由AppPreferences管理。 - 业务模型实现
Codable,默认通过LocalJSONStore写入 Application Support。 - SwiftUI View 负责展示与交互,不直接决定文件路径或本地化回退策略。
扩展位置
- 产品模型:
Sources/CarbonFiberApp/Models/ - 产品业务引擎:
Sources/CarbonFiberApp/Engines/ - 本地持久化:
Sources/CarbonFiberApp/Storage/ - iOS 专用实现:
Sources/CarbonFiberApp/Platform/iOS/ - macOS 专用实现:
Sources/CarbonFiberApp/Platform/macOS/
新增目录后同步更新 project.yml、Taskfile.yml、AGENTS.md 和本 Wiki;不要把生成的 project.pbxproj 当作长期修改入口。