Saik0s / CleanEvents

Example application using clean architecture

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CleanEvents Logo


🚧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.


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"

Downloading the Code

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

git clone
cd CleanEvents

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.


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


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


Any pull requests are welcome.

Commit emoji convention


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


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


ezoic increase your site revenue


Example application using clean architecture

License:MIT License


Language:Shell 40.3%Language:Python 29.9%Language:Swift 25.9%Language:Objective-C 2.2%Language:Makefile 1.7%