/CleanEvents

Example application using clean architecture

Primary LanguageShellMIT LicenseMIT

CleanEvents Logo

CleanEvents

šŸš§Under DevelopmentšŸš§

GitHub release License Build Status codebeat badge codecov

CleanEvents is my minimum viable product for experimenting with different approaches in software architecture. The primary goal of this project is to create and combine solutions which in my opinion are the most accurate in meeting my requirements. Overall this project must be like a draft with solutions for the most common problems so that it can be used as a start point in any application development process. It must follow SOLID and DRY principles, be very easy to read, clean, devoid of ambiguity, easily scalable in an obvious way, developed using TDD approach and at the same time provide perfect development experience.

If automatizing some steps can create required solutions - the developer has to automize implementation process razer then implement it by hands. I believe that such approach will help developers never to lose their enthusiasm while working on a long-term project and as a result, it will help to keep a high quality of their solutions on every stage of the project.

Prerequisites

First of all, you need to have bundler ruby gem and homebrew CLI installed on your system. Then you can install dependencies described in Brewfile and Gemfile. Cocoapods gem is used to manage application dependencies.

To install bundler simply run the following command in the terminal:

gem install bundler

To install Homebrew run:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Downloading the Code

The following commands will clone project and set up all required dependencies.

git clone https://github.com/Saik0s/CleanEvents.git
cd CleanEvents
Scripts/setup

Getting Started

As soon as setup script finish installation and configuration of all required dependencies you will be able to build and run project using BUCK

To build the project simply run:

buck build app 

Currently, the project is compatible with Xcode 9 and later only, as it's Swift 4. I prefer to use Appcode mostly because it dramatically simplifies refactoring and code generation. Also, there are a lot of useful plugins which can be easily installed from the builtin plugins browser. Furthermore, Appcode itself has a wide range of preferences and configurations.

Buck config files can help with the understanding of the project structure and dependencies it uses. Also, there is no need to store Xcode project files in the repository - buck can easily generate them using project subcommand if need.

Swiftlint CLI helps to keep the same code style among the project and can point to different mistakes or suggest a better approach in some cases. Also it can fix some trivial issues by itself.

Sourcery generates code using templates. It takes care of trivial solutions and lets developers focus on real problems. For example, it can generate Equatable protocol implementation and updates it every time you change related struct for example.

This project does not use storyboards, xibs, and auto layouts. UI is created using Texture framework from Pinterest (ex AsyncDisplayKit from Facebook). It is built on top of UIKit and provides an ability to create smooth interfaces, even if it is very complex. Instead of slow UIKitā€™s Auto Layout, it implements own solution hardly inspired by CSS Flexbox.

Installing

To install and run application on simulator use:

buck install app -r -e -n "iPhone 8"

To regenerate project file run:

buck project

Running unit tests

To run tests use:

buck test

Questions

If you have questions about any aspect of this project, please feel free to open an issue. I would love to hear from you!

Contributing

Any pull requests are welcome.

Commit emoji convention

Versioning

I use SemVer for versioning. For the versions available, see the tags on this repository.

License

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

Acknowledgments