To Do

To Do To Do

My most customizable app to date, this To Do app utilizes the local device database, and allows users to configure the app theme and icons dynamically.

  • iOS 15+


  • SwiftUI 2.0

Concept

Building off of the lessons learned in the Devote project, To Do is designed to be a more customizable task management application. To Do performs many of the same functions as it's predecessor, but brings options such as a customizable App Icon, and dynamic theme colors, to create an experience that can be better tailored to the end-user. This increased customization helps the user feel a greater sense of ownership over the app itself, and increases the likelihood that the user will interact with the app on a regular cadence.

Solution

Similar to Devote, the To Do app is build using a single screen interface, with a newly included .sheet() element to house the customization options along with links to social networking and developer websites. The main task view is built upon a conditional if { else } statement which renders a graphic view for the user if there are no tasks available, providing a selection of vector images and motivational quotes; or a categorized list of tasks, ordered alphabetically using the \.self identifier. New tasks can be added using a second .sheet() view, which includes a priority selector alongside the standard text field.


This customization sheet, is comprised of a basic component view, with various sections built into a Form structure. It introduces two new pieces of functionality, first the ability to update the App Icon from a selected set of icons by using Swifts native .SetAlternateIconName() function. This function uses a defined string to select from the images located in the app storage, update the icon image displayed by the iOS system accordingly. Nine distinct App Icon variations were provided to the user in the To Do app.

In addition the customization of the App Icon, To Do also provides the user with the ability to select their preferred theme color from a provided set. This is achieved by updating the UserDefaults "Theme" key, and storing that value in the apps local storage. With this property set as an observable object, the app refreshes the displayed view when a new value is detected, and the updated theme is applied.



CoreData Cloud Config

Analysis

The To Do project feels like a near-production-ready task management application. The customization options enable the ability for the user to tailor the look and feel of the app to their preference, and the prioritization system implemented alongside the NewTask() method gives an additional layer of detail to each task item.

However, as To Do is limited by the decision to use the on-device memory instead of the Core Data framework that powered Devote, To Do is unable to elegantly implement session persistence related to the completion of the task item, nor is it able to readily manage changes to the task items themselves. Due to this fact, implementing an task update option would require more effort than if the app were built using Core Data.

Additionally, design choices such as the \.self identifier for the task list limit the sort and filter options, which make managing a longer task list a more daunting task. In order to rectify these issues, refactoring the app to use Core Data, and including a UUID() identifier in the data set would allow for a deeper, more flexible task list. The newly implemented customization options could also be further enhanced, by implementing a custom color set which could be defined by providing the user with an RGB color picker, and feeding the resulting combination into a custom variable for the UserDefaults "Theme" key to consume.