# wingify/vwo-fme-ios-sdk architecture

> Architecture diagram of the GitHub repository wingify/vwo-fme-ios-sdk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wingify/vwo-fme-ios-sdk
- Repository: https://github.com/wingify/vwo-fme-ios-sdk

## Overview

VWO FME is an iOS feature-management and experimentation SDK. An app initializes an SDK instance, supplies a user context to request a feature flag, then reads the decision or tracks events and attributes. The tree and README establish these capabilities; sampled sources additionally show segmentation context enrichment, configurable storage, and batched event upload. Most API and orchestration files were not sampled, so the graph omits uncertain internal call wiring and shows only documented or source-supported relationships.

Main entry points: [`Wingify-FME/Services/CampaignDecisionService.swift`](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/CampaignDecisionService.swift) (Campaign Decisions), [`Wingify-FME/API/GetFlagAPI.swift`](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/GetFlagAPI.swift) (Get Flag API), [`Wingify-FME/Packages/Network/Manager/NetworkManager.swift`](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/Network/Manager/NetworkManager.swift) (Network Manager), [`Wingify-FME/Wingify/VWO.swift`](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/VWO.swift) (VWO Facade)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["SDK API"]
  node_facade["VWO Facade<br/>[VWO.swift]"]
  node_builder["SDK Builder"]
  node_client["SDK Client"]
  node_flagapi["Get Flag API<br/>[GetFlagAPI.swift]"]
  node_eventapi["Track Event API"]
  node_attributeapi["Set Attribute API"]
end

subgraph group_decision["Flag Decisions"]
  node_decisionservice["Campaign Decisions"]
  node_decisionmaker["Decision Maker"]
  node_holdouts["Holdout Groups"]
end

subgraph group_services["SDK Services"]
  node_settings["Settings Manager"]
  node_hooks["Hooks and Integrations<br/>[HooksManager.swift]"]
end

subgraph group_transport["Persistence and Transport"]
  node_storage["Local Storage"]
  node_connector["Custom Storage"]
  node_network["Network Manager"]
  node_eventdata[("Event Queue")]
  node_sync["Event Sync<br/>[SyncManager.swift]"]
end

subgraph group_internal["Evaluation and Support"]
  node_segmentation["Segmentation"]
  node_logger["Logging"]
end

node_app(("Application"))
node_vwo{{"VWO Services"}}

node_app -->|"calls SDK"| node_facade
node_facade -->|"initializes"| node_builder
node_facade -->|"accesses instance"| node_client
node_app -->|"requests flag"| node_flagapi
node_flagapi -->|"uses settings"| node_settings
node_settings -->|"fetches settings"| node_network
node_network -->|"sends requests"| node_vwo
node_flagapi -->|"requests decision"| node_decisionservice
node_decisionservice -->|"evaluates campaign"| node_decisionmaker
node_decisionmaker -->|"evaluates targeting"| node_segmentation
node_decisionservice -->|"checks holdouts"| node_holdouts
node_decisionservice -->|"reads and writes"| node_storage
node_segmentation -->|"fetches gateway data"| node_network
node_segmentation -->|"caches gateway data"| node_storage
node_flagapi -->|"runs callbacks"| node_hooks
node_app -->|"tracks events"| node_eventapi
node_eventapi -->|"queues events"| node_eventdata
node_app -->|"sets attributes"| node_attributeapi
node_eventdata -->|"provides queued events"| node_sync
node_sync -->|"uploads batches"| node_network
node_sync -->|"deletes uploaded events"| node_eventdata
node_storage -.->|"uses configured connector"| node_connector
node_decisionservice -->|"logs decisions"| node_logger

click node_facade "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/VWO.swift"
click node_builder "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/WingifyBuilder.swift"
click node_client "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/WingifyClient.swift"
click node_flagapi "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/GetFlagAPI.swift"
click node_eventapi "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/TrackEventAPI.swift"
click node_attributeapi "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/SetAttributeAPI.swift"
click node_settings "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/SettingManager.swift"
click node_decisionservice "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/CampaignDecisionService.swift"
click node_decisionmaker "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/DecisionMaker/DecisionMaker.swift"
click node_segmentation "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/SegmentationEvaluator/Core/SegmentationManager.swift"
click node_holdouts "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/HoldoutGroupService.swift"
click node_hooks "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/HooksManager.swift"
click node_storage "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/LocalStorageService.swift"
click node_connector "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/Storage/StorageConnectorProvider.swift"
click node_network "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/Network/Manager/NetworkManager.swift"
click node_eventdata "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/CoreData/Helper/EventDataManager.swift"
click node_sync "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/CoreData/Helper/SyncManager.swift"
click node_logger "https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/LoggerService.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_facade,node_builder,node_client,node_flagapi,node_eventapi,node_attributeapi toneBlue
class node_decisionservice,node_decisionmaker,node_holdouts toneAmber
class node_settings,node_hooks toneMint
class node_storage,node_connector,node_network,node_eventdata,node_sync toneRose
class node_segmentation,node_logger,node_app,node_vwo toneIndigo
```

## Components

### SDK API

- [VWO Facade](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/VWO.swift): `Wingify-FME/Wingify/VWO.swift`
- [SDK Builder](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/WingifyBuilder.swift): `Wingify-FME/Wingify/WingifyBuilder.swift`
- [SDK Client](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Wingify/WingifyClient.swift): `Wingify-FME/Wingify/WingifyClient.swift`
- [Get Flag API](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/GetFlagAPI.swift): `Wingify-FME/API/GetFlagAPI.swift`
- [Track Event API](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/TrackEventAPI.swift): `Wingify-FME/API/TrackEventAPI.swift`
- [Set Attribute API](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/API/SetAttributeAPI.swift): `Wingify-FME/API/SetAttributeAPI.swift`

### Flag Decisions

- [Campaign Decisions](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/CampaignDecisionService.swift): `Wingify-FME/Services/CampaignDecisionService.swift`
- [Decision Maker](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/DecisionMaker/DecisionMaker.swift): `Wingify-FME/Packages/DecisionMaker/DecisionMaker.swift`
- [Holdout Groups](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/HoldoutGroupService.swift): `Wingify-FME/Services/HoldoutGroupService.swift`

### SDK Services

- [Settings Manager](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/SettingManager.swift): `Wingify-FME/Services/SettingManager.swift`
- [Hooks and Integrations](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/HooksManager.swift): `Wingify-FME/Services/HooksManager.swift`

### Persistence and Transport

- [Local Storage](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/LocalStorageService.swift): `Wingify-FME/Services/LocalStorageService.swift`
- [Custom Storage](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/Storage/StorageConnectorProvider.swift): `Wingify-FME/Packages/Storage/StorageConnectorProvider.swift`
- [Network Manager](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/Network/Manager/NetworkManager.swift): `Wingify-FME/Packages/Network/Manager/NetworkManager.swift`
- [Event Queue](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/CoreData/Helper/EventDataManager.swift): `Wingify-FME/CoreData/Helper/EventDataManager.swift`
- [Event Sync](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/CoreData/Helper/SyncManager.swift): `Wingify-FME/CoreData/Helper/SyncManager.swift`

### Evaluation and Support

- [Segmentation](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Packages/SegmentationEvaluator/Core/SegmentationManager.swift): `Wingify-FME/Packages/SegmentationEvaluator/Core/SegmentationManager.swift`
- [Logging](https://github.com/wingify/vwo-fme-ios-sdk/blob/master/Wingify-FME/Services/LoggerService.swift): `Wingify-FME/Services/LoggerService.swift`

### Other components

- **Application**
- **VWO Services**

## Connections

- Application → VWO Facade: calls SDK
- VWO Facade → SDK Builder: initializes
- VWO Facade → SDK Client: accesses instance
- Application → Get Flag API: requests flag
- Get Flag API → Settings Manager: uses settings
- Settings Manager → Network Manager: fetches settings
- Network Manager → VWO Services: sends requests
- Get Flag API → Campaign Decisions: requests decision
- Campaign Decisions → Decision Maker: evaluates campaign
- Decision Maker → Segmentation: evaluates targeting
- Campaign Decisions → Holdout Groups: checks holdouts
- Campaign Decisions → Local Storage: reads and writes
- Segmentation → Network Manager: fetches gateway data
- Segmentation → Local Storage: caches gateway data
- Get Flag API → Hooks and Integrations: runs callbacks
- Application → Track Event API: tracks events
- Track Event API → Event Queue: queues events
- Application → Set Attribute API: sets attributes
- Event Queue → Event Sync: provides queued events
- Event Sync → Network Manager: uploads batches
- Event Sync → Event Queue: deletes uploaded events
- Local Storage → Custom Storage: uses configured connector
- Campaign Decisions → Logging: logs decisions
