argent-ios
Native Swift (MVVM) fintech customer app — SIP/investment, KYC, bank-account & mandate flows, with a generic token-refreshing network layer.
SwiftUIKitSwiftUIMVVM
High-level design
A native iOS client organised feature-first around MVVM — authentication, investment (SIP/lumpsum), account and mandate domains each own their ViewModels and services behind one network layer.
Core
AuthManager, SessionManager (keychain token + refresh), onboarding & localization state
↓
Services
generic NetworkService with automatic token refresh, per-domain API services
↓
ViewModels
Authentication, Investment, Order, Home, Onboarding — each an ObservableObject
↓
Views
SwiftUI screens plus UIKit-backed web/Lottie/M3U8 media components
Low-level design
The load-bearing piece is the network layer: token expiry is handled once, not per call site.
- –SessionManager holds access/refresh tokens in the Keychain, keyed by app domain
- –NetworkService centralises auth headers and refresh-on-401, so services stay thin
- –Codable models mirror the API contract; ViewModels expose plain published state