As for the architecture of Repeat the Model-View-Controller (MVC) pattern was implemented. To achieve that, the views were programmed separate from the view controller, and elements like the date pickers were designed as single responsibility objects with an API to change the name, date and the restrictions of the date. The same is true for almost all elements in the view, for example the table view cells, the name and the timespan elements.
The database is separated by design in iOS. Business logic like date calculation, persistence or notification handling are distinct from each other. Lastly the view controllers bring together the views and the logic. Consequently there are three view controllers responsible for the main screen, the edit screen and the map screen. It was made sure, that every component was decoupled from the rest of the code as much as possible. The Database class is the only place where model objects can be created, stored and changed and the notifications class is responsible only to create, modify and delete notifications. The same is true for all the classes. Repeats architecture is shown in the image below.
Repeat consist of only 3 screens in total as shown in the image below. The main screen, the edit screen and the map screen. Each screen has a distinct purpose. The main screen displays an overview over all currently running tasks and gives control over these. It makes it possible to reset a task as well as create and edit them. The edit screen displays the details of a task and permits editing its content. Lastly, the map screen makes it possible to set an area on the map to restrict the notifications for the currently edited task.
In summery it can be said, that the architecture of Repeat is separated in distinct small parts with single responsibility. Additionally this is true for the UI of Repeat which not only looks beautiful but is designed to let the user only do the things right. In the future we plan to expand Repeat to make it even more useful to the user.
Besides the technical goals, our goal was to improve our personal technical knowledge. We wanted to learn the swift programming language and how to use the tools provided by Apple to expand our horizon. The decision to realize Repeat without prior knowledge about swift helped us to learn a new programming language from scratch.