Example iOS app designed using MVVM-C and Layered Architecture. Uses Swift Concurrency.
The app shows cryptocurrency prices and other related info. Built with Messari API.
It has two modules: AssetsList and AssetDetails. The list of cryptocurrencies is loaded in batches.
![]() |
![]() |
![]() |
![]() |
- Layered Architecture
- MVVM
- Flow coordinator
- Dependency Injection, DIContainer
- Data Binding using the lightweight Observable<T>
- Closure-based delegation using the lightweight Event<T>
- Reusable data sources
- async/await with the existing Infrastructure remaining unchanged
- SharedEvents - a NotificationCenter-like component
- Currency conversion service - for displaying asset prices in different currencies (USD, EUR, etc.)
- Configurable use of UserDefaults or SwiftData example
- Cached Task to avoid making duplicate network requests
- Advanced using of Codable
- Localization
- Unit tests
- SwiftEvents - The easiest way to implement data binding and notifications. Includes Event<T> and Observable<T>. Has a thread-safe version.
- URLSessionAdapter - A Codable wrapper around URLSession for networking.
- Toast-Swift - A Swift extension that adds toast notifications to the UIView object class.
- UAObfuscatedString - A simple category to hide sensitive strings from appearing in your binary.
The dependency manager is Swift Package Manager. To update package versions:
Xcode: File -> Packages -> Update to Latest Package Versions
iOS version support: 17.0+. Xcode 15.0+, Swift 5.5+