🚧Under Development 🚧
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
Cocoapods gem is used to manage application dependencies.
To install bundler simply run the following command in the terminal:
gem install bundler
/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
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:
Running unit tests
To run tests use:
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
This project is licensed under the MIT License - see the LICENSE.md file for the details.