- Notifications
You must be signed in to change notification settings - Fork11
Example iOS app designed using MVVM-C and Clean Architecture. Uses Swift Concurrency.
License
denissimon/iOS-MVVM-Clean-Architecture
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Example iOS app designed using MVVM-C and Clean Architecture. Uses Swift Concurrency.
The app retrieves images for any search query or tag via the Flickr API. It has three modules: ImageSearch, ImageDetails, HotTags.
![]() | ![]() | ![]() |
- Clean Architecture
- Explicit Architecture
- MVVM
- Flow coordinator implemented with closure-based actions
- Dependency Injection, DIContainer
- Protocol-Oriented Programming
- Data Binding using the lightweightObservable<T>
- Closure-based delegation using the lightweightEvent<T>
- Pure functional transformations
- Delegating entity behavior
- Alternative DTO approach
- Reusable and universalNetworkService based on URLSession
- Reusable and universalSQLite wrapper around SQLite3
- Image caching service
- Configurable use ofUIKit orSwiftUI for the same screen
- Advanced error handling
- Unit and integration tests for a number of components from all layers
Presentation (MVVM):coordinators,UI elements,SwiftUI views,UIKit storyboards,ViewControllers,ViewModels
Domain:entities,use cases,services,interfaces
Data:entity repositories,APIs,API/DB interactors (or network services and persistent storages),adapters
Detailed architecture overview
ImageSearch module:
* searchImagesUseCase.execute(imageQuery)* imageCachingService.cacheIfNecessary(data)* imageCachingService.getCachedImages(searchId: searchId)
ImageDetails module:
* getBigImageUseCase.execute(for: image)
HotTags module:
* getHotTagsUseCase.execute()
ImageCachingService implements the logic for caching downloaded images and freeing memory. This helps keep the app's memory usage under control, since there can be a lot of downloaded images, and without caching, the app could quickly accumulate hundreds of MB of memory used. Downloaded images are cached and read from the cache automatically.
- 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
- SQLiteAdapter - a simple wrapper around SQLite3
For a Swift 6 version with SWIFT_STRICT_CONCURRENCY = complete, see theswift6 branch.
iOS 15.0+, Xcode 13.0+, Swift 5.5+
About
Example iOS app designed using MVVM-C and Clean Architecture. Uses Swift Concurrency.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.


