# Send FOSMVVM SwiftUI App Setup to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "fosmvvm-swiftui-app-setup",
    "name": "FOSMVVM SwiftUI App Setup",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-swiftui-app-setup",
    "canonicalUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-swiftui-app-setup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/fosmvvm-swiftui-app-setup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=fosmvvm-swiftui-app-setup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "reference.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "fosmvvm-swiftui-app-setup",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-03T03:14:05.581Z",
      "expiresAt": "2026-05-10T03:14:05.581Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=fosmvvm-swiftui-app-setup",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=fosmvvm-swiftui-app-setup",
        "contentDisposition": "attachment; filename=\"fosmvvm-swiftui-app-setup-2.0.6.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "fosmvvm-swiftui-app-setup"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/fosmvvm-swiftui-app-setup"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup",
    "downloadUrl": "https://openagent3.xyz/downloads/fosmvvm-swiftui-app-setup",
    "agentUrl": "https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent.md"
  }
}
```
## Documentation

### FOSMVVM SwiftUI App Setup

Generate the main App struct for a SwiftUI application using FOSMVVM architecture.

### Conceptual Foundation

For full architecture context, see FOSMVVMArchitecture.md | OpenClaw reference

The App struct is the entry point of a SwiftUI application. In FOSMVVM, it has three core responsibilities:

┌─────────────────────────────────────────────────────────────┐
│                      @main App Struct                        │
├─────────────────────────────────────────────────────────────┤
│  1. MVVMEnvironment Setup                                   │
│     - Bundles (app + localization resources)                │
│     - Deployment URLs (production, staging, debug)          │
│                                                              │
│  2. Environment Injection                                   │
│     - .environment(mvvmEnv) on WindowGroup                  │
│     - Custom environment values                             │
│                                                              │
│  3. Test Infrastructure (DEBUG only)                        │
│     - .testHost { } modifier for UI testing                 │
│     - registerTestingViews() for individual view testing    │
└─────────────────────────────────────────────────────────────┘

### 1. MVVMEnvironment

The MVVMEnvironment provides FOSMVVM infrastructure to all views:

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")!)
        ]
    )
}

Key configuration:

appBundle - Usually Bundle.main (the app bundle)
resourceBundles - Array of localization bundles from your modules
deploymentURLs - URLs for each deployment environment

Resource Bundle Accessors:

Each module that contains localization resources should provide a bundle accessor:

// In your ViewModels module (e.g., MyAppViewModels/ResourceAccess.swift)
public enum MyAppViewModelsResourceAccess {
    public static var localizationBundle: Bundle { Bundle.module }
}

This pattern:

Uses Bundle.module which SPM automatically provides for each module
Provides a clean public API for accessing the module's resources
Keeps bundle access centralized in one place per module

### 2. Environment Injection

The MVVMEnvironment is injected at the WindowGroup level:

var body: some Scene {
    WindowGroup {
        MyView()
    }
    .environment(mvvmEnv)  // ← Makes FOSMVVM infrastructure available
}

This makes the environment available to all views in the hierarchy.

### 3. Test Infrastructure

The test infrastructure enables UI testing with specific configurations:

.testHost { } modifier:

var body: some Scene {
    WindowGroup {
        ZStack {
            LandingPageView()
        }
        #if DEBUG
        .testHost { testConfiguration, testView in
            // Handle specific test configurations...

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

Key points:

Apply to the top-level view in WindowGroup (the outermost view in your hierarchy)
This ensures the modifier wraps the entire view hierarchy to intercept test configurations
Always include the default: case
The default case detects test mode via process arguments
Sets @State private var underTest = false flag
Optional: Add specific test configurations for advanced scenarios

registerTestingViews() function:

#if DEBUG
private extension MyApp {
    @MainActor func registerTestingViews() {
        mvvmEnv.registerTestView(LandingPageView.self)
        mvvmEnv.registerTestView(SettingsView.self)
        // ... register all ViewModelViews for individual testing
    }
}
#endif

Key points:

Extension on the App struct (not MVVMEnvironment)
Called from init()
Registers every ViewModelView for isolated testing
DEBUG only

### When to Use This Skill

Starting a new FOSMVVM SwiftUI application
Migrating an existing SwiftUI app to FOSMVVM
Setting up the App struct with proper FOSMVVM infrastructure
Configuring test infrastructure for UI testing

### What This Skill Generates

ComponentLocationPurposeMain App structSources/App/{AppName}.swiftEntry point with MVVMEnvironment setupMVVMEnvironment configurationComputed property in App structBundles and deployment URLsTest infrastructureDEBUG blocks in App structUI testing support

### Project Structure Configuration

PlaceholderDescriptionExample{AppName}Your app nameMyApp, AccelApp{AppTarget}Main app targetApp{ResourceBundles}Module names with localizationMyAppViewModels, SharedResources

### How to Use This Skill

Invocation:
/fosmvvm-swiftui-app-setup

Prerequisites:

App name understood from conversation context
Deployment URLs discussed or documented
Resource bundles identified (modules with localization)
Test support requirements clarified

Workflow integration:
This skill is used when setting up a new FOSMVVM SwiftUI application or adding FOSMVVM infrastructure to an existing app. The skill references conversation context automatically—no file paths or Q&A needed.

### Pattern Implementation

This skill references conversation context to determine App struct configuration:

### Configuration Detection

From conversation context, the skill identifies:

App name (from project discussion or existing code)
Deployment environments (production, staging, debug URLs)
Resource bundles (modules containing localization YAML files)
Test infrastructure (whether UI testing support needed)

### MVVMEnvironment Setup

Based on project structure:

App bundle (typically Bundle.main)
Resource bundle accessors (from identified modules)
Deployment URLs (for each environment)
Current version (from shared module)

### Test Infrastructure Planning

If test support needed:

Test detection (process arguments check)
Test host modifier (wrapping top-level view)
View registration (all ViewModelViews for testing)

### File Generation

Main App struct with @main attribute
MVVMEnvironment computed property
WindowGroup with environment injection
Test infrastructure (if requested, DEBUG-only)
registerTestingViews() extension (if test support)

### Context Sources

Skill references information from:

Prior conversation: App requirements, deployment environments discussed
Project structure: From codebase analysis of module organization
Existing patterns: From other FOSMVVM apps if context available

### MVVMEnvironment as Computed Property

The MVVMEnvironment is a computed property, not a stored property:

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

Why computed?

Keeps initialization logic separate
Can be customized in DEBUG vs RELEASE
Clear dependency on bundles and URLs

### Test Detection Pattern

The default test detection uses process arguments:

@State private var underTest = false

// In .testHost default case:
testView
    .onAppear {
        // Right now there's no other way to detect if the app is under test.
        // This is only debug code, so we can proceed for now.
        underTest = ProcessInfo.processInfo.arguments.count > 1
    }

Why this approach?

Simple and reliable for DEBUG builds
No additional dependencies
Process arguments are set by test runner

### Register All ViewModelViews

Every ViewModelView should be registered for testing:

@MainActor func registerTestingViews() {
    // Landing Page
    mvvmEnv.registerTestView(LandingPageView.self)

    // Settings
    mvvmEnv.registerTestView(SettingsView.self)
    mvvmEnv.registerTestView(ProfileView.self)

    // Dashboard
    mvvmEnv.registerTestView(DashboardView.self)
    mvvmEnv.registerTestView(CardView.self)
}

Organization tips:

Group by feature/screen with comments
Alphabetical order within groups
One view per line for easy scanning

### Multiple Environment Values

You can inject multiple environment values:

var body: some Scene {
    WindowGroup {
        MyView()
    }
    .environment(mvvmEnv)
    .environment(appState)
    .environment(\\.colorScheme, .dark)
    .environment(\\.customValue, myCustomValue)
}

### Conditional Test Registration

You can conditionally register views based on build configuration:

#if DEBUG
@MainActor func registerTestingViews() {
    mvvmEnv.registerTestView(LandingPageView.self)

    #if INCLUDE_ADMIN_FEATURES
    mvvmEnv.registerTestView(AdminPanelView.self)
    #endif
}
#endif

### Advanced Test Configurations

You can add specific test configurations in .testHost:

.testHost { testConfiguration, testView in
    switch try? testConfiguration.fromJSON() as MyTestConfiguration {
    case .specificScenario(let data):
        testView.environment(MyState.stub(data: data))
            .onAppear { underTest = true }

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

### File Templates

See reference.md for complete file templates.

### Naming Conventions

ConceptConventionExampleApp struct{Name}AppMyApp, AccelAppMain file{Name}App.swiftMyApp.swiftMVVMEnvironment propertymvvmEnvAlways mvvmEnvTest flagunderTestAlways underTest

### Deployment Configuration

FOSMVVM supports deployment detection via Info.plist:

CI Pipeline Sets:
   FOS_DEPLOYMENT build setting (e.g., "staging" or "production")
        ↓
Info.plist Contains:
   FOS-DEPLOYMENT = $(FOS_DEPLOYMENT)
        ↓
Runtime Detection:
   FOSMVVM.Deployment.current reads from Bundle.main.infoDictionary

Local development override:

Edit Scheme → Run → Arguments → Environment Variables
Add: FOS-DEPLOYMENT = staging

### See Also

Architecture Patterns - Mental models and patterns
FOSMVVMArchitecture.md - Full FOSMVVM architecture
fosmvvm-viewmodel-generator - For creating ViewModels
reference.md - Complete file templates

### Version History

VersionDateChanges1.02026-01-23Initial skill for SwiftUI app setup1.12026-01-24Update to context-aware approach (remove file-parsing/Q&A). Skill references conversation context instead of asking questions or accepting file paths.
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: foscomputerservices
- Version: 2.0.6
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-03T03:14:05.581Z
- Expires at: 2026-05-10T03:14:05.581Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup)
- [Send to Agent page](https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent)
- [JSON manifest](https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/fosmvvm-swiftui-app-setup/agent.md)
- [Download page](https://openagent3.xyz/downloads/fosmvvm-swiftui-app-setup)