Skip to content

An iOS app to showcase my iOS development skills ( Clean Architecture + MVVM-C + SwiftLint + SwiftGen + Combine + UIKit, etc..)

License

Notifications You must be signed in to change notification settings

eabsk/Super-Marvel

Repository files navigation

Logo

Super-Marvel 🚀

License: MIT
Super-Marvel is an iOS app that uses the Marvel API to display a list of Marvel characters and their details. You can browse through hundreds of heroes and villains from the Marvel universe, see their comics, and learn more about their powers and abilities.

This app is created as a personal project to showcase my skills and passion for iOS development. This app demonstrates how to implement Clean Architecture and some of the best practices for iOS app development using UIKIt, Combine, MVVM-C, SwiftLint, SwiftGen, and more.
Report bug · Request feature

Screenshots

Light Home   Dark Home   Dark Character Profile   Light Character Profile

Setup

It's recommended that all team members work on a project depending on ruby & ruby gems to have the same project setup in order to avoid any version conflicts and to avoid inconvenience issues. so please everyone, follow the following steps to make sure you have the appropriate setup for the project.

  1. Ruby If you use macOS, system Ruby is not recommended. There is a variety of ways to install Ruby without having to modify your system environment. For macOS and Linux, rbenv is one of the most popular ways to manage your Ruby environment. It's recommended to install rbenv via HomeBrew. Install Ruby 2.7.6 by running:

    rbenv install 2.7.6

    the app supports Ruby versions 2.7.6 or newer. Verify which Ruby version you're using:

    ruby --version

    result for example-> $ ruby 2.7.6p137 (2022-02-01 revision 5445e04352) [x86_64-darwin19]

  2. Bundler It is recommended that you use Bundler and Gemfile to define the dependency of the app.
    Install Bundler by running:

    sudo gem install bundler
  3. Install Ruby Gems in the project directory by running:

    sudo bundle install

    Note: Try to restart the terminal and open it in the project directory again if you can't install the gems

  4. Arkana Environment file

    NOTE: To skip step #4 and step #5, check out this branch quick-start

    Create a file called .env in the root directory of the project and add the following lines to it:

    MarvelPrivateKey=your_private_key
    MarvelPublicKey=your_public_key
    MarvelHashKey=make_hash_by_MD5
    MarvelTimeStamp=current_time_stamp

    To get your own keys, look at Marvel APIs to start using Marvel APIs Keys.

  5. Run the following command to generate the ArkanaKeys local package that will be used to securely fetch your keys in runtime:

    bin/arkana
  6. Cocoapods Installation in the project directory by running:

    bundle exec pod install
  7. Fastlane (Configured)

Marvel APIs

As this project uses the Marvel API, you need to get your own API keys to run the project. You can get them by following these steps:

  1. Go to the Marvel Developer Portal and create an account.
  2. Once you have an account, go to the Get a Key page and get your public and private keys.

Folder Structure

📦SuperMarvel
┣ 📂AppSchems
┣ 📂Core
┣ 📂DataModels
┃ ┣ 📂Mappers
┃ ┣ 📂Character
┣ 📂Networking
┣ 📂APIs
┣ 📂Requests
┣ 📂UseCases
┃ ┣ 📂Character
┃ 📂Repositories
┣ 📂Base
┃ ┣ 📂Config
┃ ┣ 📂Wrappers
┃ ┣ 📂TypeAlias
┃ ┣ 📂Services
┃ ┗ 📂Observers
┣ 📂Coordinators
┣ 📂Scenes
┃ ┣ 📂Splash
┃ ┣ 📂Character
┃ ┃ ┃ ┣ 📂Characters
┃ ┃ ┃ ┗ 📂CharacterDetails
┣ 📂Extensions
┣ 📂Localize
┣ 📂Assets
┣ 📂Helpers
┃ ┣ 📂Toast
┣ 📂SupportFiles
┗ 📜SuperMarvelApp.swift => The app entry point.

Tools & Frameworks Used

Tool Used for
SwifGen tool to automatically generate Swift code for resources of your projects
Arkana Securely storing secrets and keys
Kingfisher Image Loading & Caching
SwiftLint Code Linting
Moya Networking Layer tool
NVActivityIndicatorView collection of awesome loading animations
L10-Swift improves localization in swift app, providing cleaner syntax and in-app language switching.
Mockingbird Generating mock, stub, and verify objects in Swift unit tests

Upcoming Features

  • Integrate Bitrise with Fastlane
  • UI Testing
  • Integrate with Sentry & codecov

Development Environment

Swift Badge

  • Xcode 14.3.1
  • Swift 5.8
  • iOS Deployment Target 13.0
  • Ruby Version 2.7.6
  • Coocapods 1.12.1

License

This project is licensed under the MIT License - see the LICENSE file for details