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 https://raw.githubusercontent.com/Homebrew/install/master/install)"
The following commands will clone project and set up all required dependencies.
git clone https://github.com/Saik0s/CleanEvents.git
cd CleanEvents
Scripts/setup
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
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.
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 LICENSE.md file for the details.