Simple sample of using the VIP (Clean Swift) architecture for iOS

Overview

MyAnimeList

Simple sample of using the VIP (Clean Swift) architecture for iOS.

ViewController: controls the event handling, view life cycle and display logic
Interactor: app's business logic
Worker: interface and implementation of the work that need to be done as managing request and response from database
Presenter: formats data to be presented in View Controller
Router: controlls the screen transition
Configurator: configures delegates dependency
Model: pass data through the classes' boundaries

Project Setup

All pods are already commited, but if you want to install others, do:

  • Make sure you have ruby > 2.3.7
  • Update Podfile
  • Run bundle install
  • Run bundle exec pod install
  • Make sure you commit the pods, Podfile and Podfile.lock

Hacktoberfest

For beginners:

  • You can add an Anime that you like on the Realm Database file (RealmDatabase.swift)

Contribution

  • If you have a feature request, open an issue
  • If you want to contribute, submit a pull request
Comments
  • New design for Home & Add Anime screens

    New design for Home & Add Anime screens

    Hi @MaisaMilena,

    I just make a quick design for Home and Add Anime screens, the last one with a modal approach. #5

    InVision project with two screens, color palette, fonts and spacing used.

    Quick preview: screen shot 2018-10-07 at 21 33 22

    I hope you like them ;)

    opened by ismaeldcom 8
  • Add new design for Add Anime screen

    Add new design for Add Anime screen

    Description

    Implement new design for AddAnime screen. Related to Issue #5 Follow Screen Design

    You will need to:

    • Work on the storyboard AddAnime.storyboard
    • Use the colors (PrimaryBlue and SecondaryGray) available on InterfaceBuilder
    • If need to use colors in code, use the colors available as an extension of UIColor (UIColor.primaryBlue and UIColor.secondaryGray)

    Criteria of acceptance:

    • [ ] Follow the spacing and elements of the prototype screen
    • [ ] Only work on the AddAnime.storyboard
    • [ ] Apply the fonts described in the prototype
    • [ ] Apply the colors described in the prototype
    • [ ] Be careful with constraints
    • [ ] The screen has to continue to check if Title and Description are empty.
    • [ ] Field Rating has to be changed to be an input. It cannot be empty, must receive values between 1 to 5
    opened by MaisaMilena 4
  • New design for iOS screen

    New design for iOS screen

    Description

    The current screens of the app were designed by... well... a programmer. It's functional but not beautiful, we can do it better.

    Screen of Add Anime: image

    Criteria of acceptance

    • Do a new design for the Home Screen
    • Do a new design for the screen of Add Anime
    • A link of the design prototype must be available on InVision app or similar. It has to contain the colors used, spacing, font type and size. If some image or icon is used, add it references on the file "License - Use of image"
    Hacktoberfest iOS beginner design 
    opened by MaisaMilena 3
  • Add pods

    Add pods

    This PR adds some help in project configuration:

    • Commit Pods folder: Having the pods commited fasten the project setup in good network connections, which are the most common
    • Add Gemfile with cocoapods version: This way, we ensure the cocoapods version is always the same when we run pod install with bundle exec pod install
    • Add ruby-version file: With the same idea of having the Gemfile, this way we ensure the ruby version is always the same when running bundle install
    opened by andreanmasiro 1
  • Update rating score from a boring UISlider to Stars

    Update rating score from a boring UISlider to Stars

    Description

    Currently, the rating score is a very simples UISlider, it's not good. Let's do it with starts like this one: image Tip: there are some tutorials and frameworks available to help you implement it.

    Criteria of acceptance

    • Do a star rating score. You decide how to do it:
      • it can be simple: a collection of buttons with tag from 1 to 5. When a button is clicked, identify it's tag and that's the score.
      • use a framework were the slide fills the stars
    Hacktoberfest iOS swift beginner 
    opened by MaisaMilena 1
  • Add input validation

    Add input validation

    Description

    When the user is adding a new Anime, the app does not make a validation of the data checking if is empty or not.

    Criteria of acceptance

    • Title must not be empty
    • Description must not be empty
    • A proper message must appear for the users, indicating that the field cannot be empty

    (remember that blank space also makes the title empty)

    Hacktoberfest swift beginner 
    opened by MaisaMilena 1
  • Add local database

    Add local database

    Description

    Add local persistency to the project. Currently, the database is an array in AnimeDatabase.swift and the new data are not really added to it because is done in memory.

    Criteria of acceptance

    • Determine a local database that you want to work with. For example: Realm, Dictionary file
    • If a framework as Realm, add a podfile
    • Update AnimeDatabase to Manage the flow of data between the Workers and the database
    Hacktoberfest iOS swift persistency of data 
    opened by MaisaMilena 0
  • Bump tzinfo from 1.2.5 to 1.2.10 in /MyAnimeList

    Bump tzinfo from 1.2.5 to 1.2.10 in /MyAnimeList

    Bumps tzinfo from 1.2.5 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    v1.2.9

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    TZInfo v1.2.9 on RubyGems.org

    v1.2.8

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    TZInfo v1.2.8 on RubyGems.org

    v1.2.7

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    TZInfo v1.2.7 on RubyGems.org

    v1.2.6

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.

    TZInfo v1.2.6 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Version 1.2.9 - 16-Dec-2020

    • Fixed an incorrect InvalidTimezoneIdentifier exception raised when loading a zoneinfo file that includes rules specifying an additional transition to the final defined offset (for example, Africa/Casablanca in version 2018e of the Time Zone Database). #123.

    Version 1.2.8 - 8-Nov-2020

    • Added support for handling "slim" format zoneinfo files that are produced by default by zic version 2020b and later. The POSIX-style TZ string is now used calculate DST transition times after the final defined transition in the file. The 64-bit section is now always used regardless of whether Time has support for 64-bit times. #120.
    • Rubinius is no longer supported.

    Version 1.2.7 - 2-Apr-2020

    • Fixed 'wrong number of arguments' errors when running on JRuby 9.0. #114.
    • Fixed warnings when running on Ruby 2.8. #112.

    Version 1.2.6 - 24-Dec-2019

    • Timezone#strftime('%s', time) will now return the correct number of seconds since the epoch. #91.
    • Removed the unused TZInfo::RubyDataSource::REQUIRE_PATH constant.
    • Fixed "SecurityError: Insecure operation - require" exceptions when loading data with recent Ruby releases in safe mode.
    • Fixed warnings when running on Ruby 2.7. #106 and #111.
    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump cocoapods-downloader from 1.2.1 to 1.6.3 in /MyAnimeList

    Bump cocoapods-downloader from 1.2.1 to 1.6.3 in /MyAnimeList

    Bumps cocoapods-downloader from 1.2.1 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Remove Avatar: The Last Airbender

    Remove Avatar: The Last Airbender

    The cartoon avatar: the last airbender is not an Anime. The definition of Anime is all animations from Japan, created by japanese people or just set on the Japan with japanese culture. This cartoon does not fit on any of these conditions, because was made on the USA, by americans and is set on China. In other words, this american cartoon doesn't have a single relation to Japan.

    Source: https://myanimelist.net/featured/1382/What_is_Anime

    opened by TheLe0 0
Owner
null
Sample iOS app demonstrating Coordinators, Dependency Injection, MVVM, Binding

iOS Sample App Sample iOS app written the way I write iOS apps because I cannot share the app I currently work on. Shown concepts Architecture concept

Igor Kulman 632 Dec 28, 2022
📅 Sample calendar app created with CalendarKit (template)

CalendarApp CalendarApp is a template repository serving as a starting point for experiments with CalendarKit. It's a sample calendar app for iOS buil

Richard Topchii 136 Dec 20, 2022
▶️ video player in Swift, simple way to play and stream media on iOS/tvOS

Player Player is a simple iOS video player library written in Swift. Looking for an obj-c video player? Check out PBJVideoPlayer (obj-c). Looking for

patrick piemonte 2k Dec 24, 2022
iOS app to record how much things cost using various data persistence implementations.

how-much iOS app to record how much things cost using various data persistence implementations. The basic data unit is an item, a simple dictionary: {

null 22 Aug 15, 2022
Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0

Social Logins iOS Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0 Note: Bef

Jogendra 12 Nov 4, 2022
A simple and beautiful barcode scanner.

Description BarcodeScanner is a simple and beautiful wrapper around the camera with barcode capturing functionality and a great user experience. Barco

HyperRedink 1.6k Dec 28, 2022
Firefox for iOS, branch works with Xcode 12.5.1, Swift 5.4.2 and supports iOS 11.4 and above.

Firefox for iOS Download on the App Store. This branch (main) This branch works with Xcode 12.5.1, Swift 5.4.2 and supports iOS 11.4 and above. Please

Mozilla Mobile 11.2k Jan 7, 2023
Fully open source text editor for iOS written in Swift.

Edhita Fully open source text editor for iOS written in Swift. http://edhita.bornneet.com/ What Edhita means? Edhita (Romaji) == エディタ (Katakana) == Ed

Tatsuya Tobioka 1.2k Jan 7, 2023
Swift audio synthesis, processing, & analysis platform for iOS, macOS and tvOS

AudioKit AudioKit is an audio synthesis, processing, and analysis platform for iOS, macOS (including Catalyst), and tvOS. Installation To add AudioKit

AudioKit 9.5k Jan 5, 2023
An iOS widget-based HN reader

Benuse, an iOS widget-based HN reader Why did you build this app? There already exist some great native Hacker News clients for iOS. I would recommend

Jordan Mann 8 Jul 21, 2022
The (second) best iOS app for GitHub.

GitHawk is the second-highest rated iOS app for GitHub. Features 0️⃣ Inbox Zero your notifications ?? Comment even faster than on GitHub desktop ?? Th

GitHawk 2.8k Dec 23, 2022
WordPress for iOS - Official repository

WordPress for iOS Build Instructions Please refer to the sections below for more detailed information. The instructions assume the work is performed f

WordPress Mobile 3.4k Jan 9, 2023
iOS app for 5calls.org

5Calls iOS App This is the repository for the iOS app for 5Calls.org. Requirements Xcode 10.2.1 iOS 10.2 Getting Started Install the dependencies: bun

5 Calls 129 Dec 25, 2022
iOS Money Manager for Board Games

Warning! This is an old project. It does contain a lot of bad code I wrote when I started out with iOS Development. I am not mantaining this project a

Richard 164 Sep 27, 2022
Development of the TUM Campus App for iOS devices - for and from students at Technical University of Munich.

Tum Campus App - An Unofficial Guide Through University Life The TUM Campus App (TCA) is an open source project, developed by volunteers and available

TUM Developers 93 Dec 16, 2022
Turning on a VPN is always a painful experience on an iOS device due to the deep nested menus.

VPN On Turning on a VPN is always a painful experience on an iOS device due to the deep nested menus. This App installs a Today Widget into Notificati

Lex Tang 4.4k Dec 26, 2022
Lightweight iOS Photo Blur App

Blurry Blurry is the go-to image blurring tool to help you apply beautiful blurs for your photos. It is perfect for creating wallpapers, backgrounds,

Andy 17 Nov 22, 2022
Kickstarter for iOS. Bring new ideas to life, anywhere.

Welcome to Kickstarter’s open source iOS app! Come on in, take your shoes off, stay a while—explore how Kickstarter’s native squad has built and conti

Kickstarter 8k Jan 6, 2023
Alfresco iOS App - Alfresco is the open platform for business-critical content management and collaboration.

Welcome to the Alfresco iOS App Alfresco is the open platform for business-critical content management and collaboration. Alfresco Mobile was designed

Alfresco Software 42 Sep 26, 2022