Skip to content

iOS App which presents all the past Space-X launches and detail of every launch ๐Ÿš€

Notifications You must be signed in to change notification settings

dknvmlhok/space-launches

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

54 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Space Launches

Last revision: 8.2.2021

About the App

  • Space Launches is an app which presents all the past Space-X launches and detail of every launch. User is able to search and sort list of launches. Caching of images is being used on the background for better user experience. Dark Mode is and landscape mode is supported.

  • This app is written with Combine and SwiftUI.

Project Support:

  • iPhone
  • iOS 14+
  • Swift 5
  • Xcode 12+

App Structure

MVVM Architecture

  • Used architecture is MVVM (Model-View-ViewModel). This architecture separates into three main groups:

Models hold application data. Contain data providers which call data using networking objects inside API.

View models transform models into values that can be displayed on a view. View model is responsible for business logic.

Views display controls and view elements on the screen. This project uses SwiftUI framework for view layer.

  • Data to domain object mapping is used to separate Data layer and Domain layer of the application. Mapping is being done upon receiving data from API inside every data provider with mapToDomain functions.

File Structure

  • Scene specific logic is separated for every scene. For example logic specific for Launches list is inside LaunchesList and shared logic for all scenes can be found inside Common.

Dependecy Injection

  • Dependecy Injection (DI) is being used for data providers in view models so their protocols can be simply injected for possible future UnitTests implementation. This is achieved by lighweight DI library Resolver.
  • This library uses property wrappers often used in SwiftUI and is capable of injection of it's ObservableObject.
  • Registering of dependencies is being done inside AllServicesResolver.

Network Layer

  • App uses well known Alamofire library.
  • Decodable protocol with CodingKey is used for JSON decoding.

Storage

  • UserDefaults standard storage is used to store launches list sort methods.

Dependency Management

Used Dependencies

  • You can view all dependencies in Project file -> Project -> Swift Packages (in the horizontal menu) or in Swift Package Dependecies at the end of the files structure.

  • Alamofire - Networking.

  • Kingfisher - Lightweight asynchronous image downloading and caching.

  • Resolver - Dependency Injection.

Localization

  • All Localizations can be found inside LocalizationKit. English is the only supported language.

Changelog

  • All notable changes to this project are documented in this file.

About

iOS App which presents all the past Space-X launches and detail of every launch ๐Ÿš€

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages