Example iOS app designed using MVVM-C and Clean Architecture. Uses Swift Concurrency, SwiftUI.
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.
![]() |
![]() |
![]() |
Presentation (MVVM): coordinators, UI elements, SwiftUI views, UIKit storyboards, ViewControllers, ViewModels
Domain: entities, use cases, services, interfaces (for use cases, services and repositories)
Data: entity repositories, APIs, API/DB interactors (or network services and storages), adapters
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.
For a Swift 6 version with SWIFT_STRICT_CONCURRENCY = complete, see the swift6 branch.
iOS 15.0+, Xcode 13.0+, Swift 5.5+