- Main: All in one, That's consider to be the main branch which holds the base modules, No modularization as everything in the same project.
- Modularization-Caching-Testing: Recommended to use this branch which contains the complete app with modularization, Testing for movie details module and applying the caching logic on movies module.
DarkMode + Pagination | Search + Details |
---|---|
Genres Filter | LightMode + OfflineState |
---|---|
- Fetching and parsing data from API.
- Listing Data.
- Navigation to Details view.
- Search
- Fetching Genres
- Filter by Genre
- Dark mode
- Scalability:
- Modularity.
- Performance:
- Caching.
- Pagination
- Handling offline state
- Reliability:
- Unit tests.
-
IDE & Deployment target:
- XCode 15.3
- Minimum Target: iOS(15)
-
UI:
- SwiftUI
- UIKit - Used in Navigation
- MVVM with Clean Architecture (UseCase & Coordinator)
-
Principals and Patterns:
- SOLID conformance:
- Features are separated into modules.
- Factory pattern to create each module.
- Repository for formatting backend data.
- Coordinator to manage navigation & communication among modules.
- UseCases for business logic.
- SOLID conformance:
-
Dependency Manager:
- Swift Package Manager
-
Dependencies:
Kingfisher: Downloading and caching images from the web.
Realm: for chaching the list.
- Be more secure and include the API keys in keychain or external tool.
- Pass the parameters in the parameters not the URL
- Implement the needed UI formatting in the viewModel not in the View.
- Spliting the logic more in the usecase.
- Unit testing for the MoviesList.
- Caching for MovieDetails.
- CI/CD