We set up a new iOS App project with the XCode IDE. Due to the official iOS developer site and some online Tutorials, we get familiar with the concepts in the iOS app development and gain a deeper understanding of the Swift programming language.
The Syntax is concise and similar to the programming language C++. Nevertheless, Swift has some unique characteristics and features too. Just to name a few, Swift has lazy properties for delay object creations and so-called Optionals are Swift's way of unifying the representation of Nothingness. If there is a need to return multiple values from a method you can use named tuples instead of objects.
Because of Repeat needs some map-functionalities, we decided to integrate the iOS MapKit into the project to obtain and store location-based tasks from the user. This is necessary to make it possible for the user to receive location based notifications.
Furthermore we did put some thoughts into the architecture of Repeat. Because of some missing knowledge about the frameworks in iOS, we only made a rough plan so far. Due to the design of iOS programming, it’s obvious to take the MVC pattern. This is because there are already Views, ViewController and a Model generated from the CoreData design.
So after thinking about what parts we need in the app (database, maps, notifications, …), we made the following architecture rough sketch:
- Overview (contains the tasks which are active)
- Add View (create a new task. With nice date picker and text boxes to make it easy to create a new task)
- Edit View (opens up to edit an existing view. Should look very similar to the “add view”, maybe even use the same)
- Date-handler (helper for dates in iOS. Just for more convenience when working with dates. Like calculating the difference between two dates and conversion of units)
- Location-handler (calculations for locations like the distance of two points, or the radius of the circle around the position where the user should be notified)
- Database-handler (basic methods to create and obtain database objects, save and edit them.)
- Notification-handler (notify the user when a countdown has reached the end and a task is due)
- Countdown-handler (because of the special use-case where the countdown should also be resetable by the user, the countdown calculation is a little more complicated. So this class should handle that)
- Start Date
- End Date
- Timespan (countdown time)
- Countdown timestamp
After starting to work with the different frameworks we are sure, with more insight there will come changes. But this is the skeleton on which we should be able to build the app with a clear structure in mind.