Display list of Marvel comic Characters and its detail view

Overview

Marvel Universe

Display list of Marvel comic Characters and its detail view

Installation

Dependencies in this project are provided via Xcodegen (project.yml). Please install all dependecies with

brew install xcodegen And after that

xcodegen generate

We have two target

Marvel : Here all the application logic resides

MarvelTests: Unit test cases for all the layers

Following are the SPM dependencies required in the yml file

  • Alamofire: For all the network calls
  • AlamofireImage: Loading remote images in the apps

Architecture:

Clean MVVM

The code is divided in 3 layers, Data, Domain and Presentation. The Application is structured following the main premises of Clean Architecture. The app follows the dependency inversion principle using the protocol oriented approach that Swift has on its foundations. The app has unit test for each layer.

Data:

On this layer belongs all the classes which main concern is handling the data and the high level rules of the app.

Entities

On this group belongs the protocol which represents the data to be consumed by the app.

Provider Implementations

Specific implementations of all Provider Contracts defined on Domain package.

- Services

Services represents external agents like the web service used for getting the data and the repository in which data is stored, grouped and fetched. All the interfaces on this group are protocols, this allows mock objects to conform these protocols and being used for testing purposes on higher layers (like use cases and view models).

Domain:

The Domain is basically what is your App about and what it can do (Models, UseCase etc.) It does not depend on UIKit or any persistence framework, and it doesn't have implementations apart from Models

UseCase:

The code in this layer contains application specific business rules. Each use case is represented by a protocol, the internal implementation is separated from the interface.

Presentation:

The objects on this layer are the UIViewControllers and the UIViews used to present the data to the user. The view controller binds the data from the ViewModels to the UI objects.

Presenter:

It works as a bridge between the presentation layer and the business logic.

Its functions are:

  1. Handle actions made by the user on the view.
  2. Call the app logic layer (Domain) to process these captured actions.
  3. Update the view associated to the (View Controller) using a new View State.

To update the view we define a State. This State is a enum with a set of defined values that represent all the possible states of the view. This state could have associated a View Model that includes all the visual information that defines that State, this ViewModel properties are let always, as they represent the visual state of a specific moment. This ViewModel should only be kept a reference to if needed for datasource data.

Flow Coordinator:

Navigator is used to navigate between the views

Unit Tests:

Unit test has been covered for Data m domain and presenter layer. UI tests are not included yet.

Other feature:

The app also contains the Accessibility functionality for dynamic system font size changes. App view auto adjusts the views to handle run time changes in the font and adjusts frames accordingly without cropping and trimming any data.(Screen shots and videos can be find in the ProjectInfo folder)

You might also like...
Objective-C library for drag-n-drop of UITableViewCells in a navigation hierarchy of view controllers.
Objective-C library for drag-n-drop of UITableViewCells in a navigation hierarchy of view controllers.

ios-dragable-table-cells Support for drag-n-drop of UITableViewCells in a navigation hierarchy of view controllers. You drag cells by tapping and hold

Generic table view controller with external data processing
Generic table view controller with external data processing

FlexibleTableViewController Swift library of generic table view controller with external data processing of functionality, like determine cell's reuse

Simple timeline view implemented by UITableViewCell
Simple timeline view implemented by UITableViewCell

TimelineTableViewCell TimelineTableViewCell is a simple timeline view implemented by UITableViewCell. The UI design of TimelineTableViewCell is inspir

A UITableView extension that enables cell insertion from the bottom of a table view.
A UITableView extension that enables cell insertion from the bottom of a table view.

ReverseExtension UITableView extension that enabled to insert cell from bottom of tableView. Concept It is difficult to fill a tableview content from

TableViews - Emoji Table View For iOS With Swift
TableViews - Emoji Table View For iOS With Swift

TableViews Hello! This is EmojiTableView. Let me introduce you my first app when

ClassicPhotos is a TableView App demos how to optimize image download and filter with operation queue.
ClassicPhotos is a TableView App demos how to optimize image download and filter with operation queue.

ClassicPhotos ClassicPhotos is a TableView App demos how to optimize image download and filter with operation queue. With Operation and Operation Queu

APDynamicGrid is a SwiftUI package that helps you create consistent and animatable grids.
APDynamicGrid is a SwiftUI package that helps you create consistent and animatable grids.

APDynamicGrid Overview APDynamicGrid is a SwiftUI package that helps you create consistent and animatable grids. The DynamicGrid View preserves the sa

A PageView, which supporting scrolling to transition between a UIView and a UITableView
A PageView, which supporting scrolling to transition between a UIView and a UITableView

YXTPageView ##A Page View, which support scrolling to transition between a UIView and a UITableView UIView (at the top) UITableView (at the bottom) In

a TableView have thumbnail cell only, and you can use gesture let it expands other expansionView, all diy
a TableView have thumbnail cell only, and you can use gesture let it expands other expansionView, all diy

ZYThumbnailTableView #####可展开型预览TableView,开放接口,完全自由定制 #####An expandable preview TableView, custom-made all the modules completely with open API you c

Owner
null
An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions.

MGSwipeTableCell MGSwipeTableCell is an easy to use UITableViewCell subclass that allows to display swipeable buttons with a variety of transitions. T

Imanol Fernandez 7k Dec 26, 2022
Use Yelp API to fetch restuarants around a location and show them in a table view

Yelp Use Yelp API to fetch restuarants around a location and show them in a table view - Infinite scrolling, Prefetching, Image Caching. Design Patter

null 0 Nov 1, 2021
A waterfall grid layout view for SwiftUI.

WaterfallGrid A waterfall grid layout view for SwiftUI. Features Irregular grid of content. Columns number different per device orientation. Spacing a

Paolo Leonardi 1.9k Jan 7, 2023
🎛 QGrid: The missing SwiftUI collection view.

[NOTE] If you'd like to see QGrid in action, check out this demo of QDesigner (see video below). Install QDesigner: https://apps.apple.com/us/app/qdes

Q Mobile 1.5k Dec 23, 2022
A flexible grid layout view for SwiftUI

?? GridStack A flexible grid layout view for SwiftUI. WWDC20 Update Apple  released LazyVGrid and LazyHGrid at WWDC20. If you are fine to only suppor

Peter Minarik 620 Nov 11, 2022
Building An Interactive Grid View

Building An Interactive Grid View This demo shows a few techniques on how to build a re-ordable grid view based on stock UICollectionView API. Here ar

Brian Coyner 8 Nov 14, 2022
Using UI Table View

News-App Table View와 Table view controller Table View : Table의 크기를 지정할 수 있다. Table View Controller: 전체의 뷰가 하나의 테이블 Table View Table view 구성요소 결정하기 어떤

Jiwon 0 Dec 9, 2021
Typed, yet Flexible Table View Controller

ConfigurableTableViewController Simple view controller that provides a way to configure a table view with multiple types of cells while keeping type s

Arek Holko 270 Oct 15, 2022
An easy-to-use UITableViewCell subclass that implements a swippable content view which exposes utility buttons (similar to iOS 7 Mail Application)

SWTableViewCell An easy-to-use UITableViewCell subclass that implements a swipeable content view which exposes utility buttons (similar to iOS 7 Mail

Christopher Wendel 7.2k Dec 31, 2022