返回顶部
f

fosmvvm-swiftui-app-setupFOSMVVM应用配置

Set up the @main App struct for FOSMVVM SwiftUI apps. Configures MVVMEnvironment, deployment URLs, and test infrastructure.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 2.0.6
安全检测
已通过
640
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

fosmvvm-swiftui-app-setup

FOSMVVM SwiftUI 应用设置

使用 FOSMVVM 架构生成 SwiftUI 应用程序的主 App 结构体。

概念基础

完整架构上下文,请参阅 FOSMVVMArchitecture.md | OpenClaw 参考

App 结构体是 SwiftUI 应用程序的入口点。在 FOSMVVM 中,它有三个核心职责:

┌─────────────────────────────────────────────────────────────┐
│ @main App 结构体 │
├─────────────────────────────────────────────────────────────┤
│ 1. MVVMEnvironment 设置 │
│ - 资源包(应用 + 本地化资源) │
│ - 部署 URL(生产、预发布、调试) │
│ │
│ 2. 环境注入 │
│ - 在 WindowGroup 上使用 .environment(mvvmEnv) │
│ - 自定义环境值 │
│ │
│ 3. 测试基础设施(仅 DEBUG 模式) │
│ - 用于 UI 测试的 .testHost { } 修饰器 │
│ - 用于单个视图测试的 registerTestingViews() │
└─────────────────────────────────────────────────────────────┘

核心组件

1. MVVMEnvironment

MVVMEnvironment 为所有视图提供 FOSMVVM 基础设施:

swift
private var mvvmEnv: MVVMEnvironment {
MVVMEnvironment(
appBundle: Bundle.main,
resourceBundles: [
MyAppViewModelsResourceAccess.localizationBundle,
SharedResourceAccess.localizationBundle
],
deploymentURLs: [
.production: .init(serverBaseURL: URL(string: https://api.example.com)!),
.debug: .init(serverBaseURL: URL(string: http://localhost:8080)!)
]
)
}

关键配置:

  • - appBundle - 通常是 Bundle.main(应用包)
  • resourceBundles - 来自模块的本地化包数组
  • deploymentURLs - 每个部署环境的 URL

资源包访问器:

每个包含本地化资源的模块应提供一个包访问器:

swift
// 在您的 ViewModels 模块中(例如,MyAppViewModels/ResourceAccess.swift)
public enum MyAppViewModelsResourceAccess {
public static var localizationBundle: Bundle { Bundle.module }
}

此模式:

  • - 使用 Bundle.module,SPM 自动为每个模块提供
  • 提供清晰的公共 API 来访问模块的资源
  • 将包访问集中到每个模块的一个位置

2. 环境注入

MVVMEnvironment 在 WindowGroup 级别注入:

swift
var body: some Scene {
WindowGroup {
MyView()
}
.environment(mvvmEnv) // ← 使 FOSMVVM 基础设施可用
}

这使得环境对层级中的所有视图都可用。

3. 测试基础设施

测试基础设施支持使用特定配置进行 UI 测试:

.testHost { } 修饰器:
swift
var body: some Scene {
WindowGroup {
ZStack {
LandingPageView()
}
#if DEBUG
.testHost { testConfiguration, testView in
// 处理特定测试配置...

default:
testView
.onAppear {
underTest = ProcessInfo.processInfo.arguments.count > 1
}
}
#endif
}
}

关键点:

  • - 应用于 WindowGroup 中的顶级视图(层级中最外层的视图)
  • 这确保修饰器包裹整个视图层级以拦截测试配置
  • 始终包含 default: 分支
  • 默认分支通过进程参数检测测试模式
  • 设置 @State private var underTest = false 标志
  • 可选:为高级场景添加特定测试配置

registerTestingViews() 函数:
swift
#if DEBUG
private extension MyApp {
@MainActor func registerTestingViews() {
mvvmEnv.registerTestView(LandingPageView.self)
mvvmEnv.registerTestView(SettingsView.self)
// ... 注册所有 ViewModelView 以进行单独测试
}
}
#endif

关键点:

  • - 在 App 结构体(而非 MVVMEnvironment)上的扩展
  • 从 init() 调用
  • 注册每个 ViewModelView 以进行隔离测试
  • 仅 DEBUG 模式

何时使用此技能

  • - 启动新的 FOSMVVM SwiftUI 应用程序
  • 将现有 SwiftUI 应用迁移到 FOSMVVM
  • 使用正确的 FOSMVVM 基础设施设置 App 结构体
  • 为 UI 测试配置测试基础设施

此技能生成的内容

组件位置目的
主 App 结构体Sources/App/{AppName}.swift带有 MVVMEnvironment 设置的入口点
MVVMEnvironment 配置
App 结构体中的计算属性 | 包和部署 URL | | 测试基础设施 | App 结构体中的 DEBUG 块 | UI 测试支持 |

项目结构配置

占位符描述示例
{AppName}您的应用名称MyApp, AccelApp
{AppTarget}
主应用目标 | App | | {ResourceBundles} | 包含本地化的模块名称 | MyAppViewModels, SharedResources |

如何使用此技能

调用:
/fosmvvm-swiftui-app-setup

前提条件:

  • - 从对话上下文中理解应用名称
  • 已讨论或记录部署 URL
  • 已识别资源包(包含本地化的模块)
  • 已明确测试支持需求

工作流集成:
此技能在设置新的 FOSMVVM SwiftUI 应用程序或向现有应用添加 FOSMVVM 基础设施时使用。该技能自动引用对话上下文——无需文件路径或问答。

模式实现

此技能引用对话上下文来确定 App 结构体配置:

配置检测

从对话上下文中,技能识别:

  • - 应用名称(来自项目讨论或现有代码)
  • 部署环境(生产、预发布、调试 URL)
  • 资源包(包含本地化 YAML 文件的模块)
  • 测试基础设施(是否需要 UI 测试支持)

MVVMEnvironment 设置

基于项目结构:

  • - 应用包(通常是 Bundle.main)
  • 资源包访问器(来自已识别模块)
  • 部署 URL(每个环境)
  • 当前版本(来自共享模块)

测试基础设施规划

如果需要测试支持:

  • - 测试检测(进程参数检查)
  • 测试宿主修饰器(包裹顶级视图)
  • 视图注册(所有 ViewModelView 用于测试)

文件生成

  1. 1. 带有 @main 属性的主 App 结构体
  2. MVVMEnvironment 计算属性
  3. 带有环境注入的 WindowGroup
  4. 测试基础设施(如果请求,仅 DEBUG 模式)
  5. registerTestingViews() 扩展(如果支持测试)

上下文来源

技能引用的信息来自:

  • - 先前对话:讨论的应用需求、部署环境
  • 项目结构:来自模块组织的代码库分析
  • 现有模式:来自其他 FOSMVVM 应用(如果上下文可用)

关键模式

MVVMEnvironment 作为计算属性

MVVMEnvironment 是计算属性,而非存储属性:

swift
private var mvvmEnv: MVVMEnvironment {
MVVMEnvironment(
appBundle: Bundle.main,
resourceBundles: [...],
deploymentURLs: [...]
)
}

为什么是计算属性?

  • - 保持初始化逻辑分离
  • 可在 DEBUG 与 RELEASE 模式下自定义
  • 对包和 URL 的清晰依赖

测试检测模式

默认测试检测使用进程参数:

swift
@State private var underTest = false

// 在 .testHost 默认分支中:
testView
.onAppear {
// 目前没有其他方法检测应用是否在测试中。
// 这只是调试代码,所以我们可以暂时继续。
underTest = ProcessInfo.processInfo.arguments.count > 1
}

为什么采用这种方法?

  • - 对于 DEBUG 构建简单可靠
  • 无需额外依赖
  • 进程参数由测试运行器设置

注册所有 ViewModelView

每个 ViewModelView 都应注册用于测试:

swift
@MainActor func registerTestingViews() {
// 登录页面
mvvmEnv.registerTestView(LandingPageView.self)

// 设置
mvvmEnv.registerTestView(SettingsView.self)
mvvmEnv.registerTestView(ProfileView.self)

// 仪表盘
mvvm

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 fosmvvm-swiftui-app-setup-1776420040 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 fosmvvm-swiftui-app-setup-1776420040 技能

通过命令行安装

skillhub install fosmvvm-swiftui-app-setup-1776420040

下载

⬇ 下载 fosmvvm-swiftui-app-setup v2.0.6(免费)

文件大小: 8.46 KB | 发布时间: 2026-4-17 20:21

v2.0.6 最新 2026-4-17 20:21
Initial ClawHub release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部