logo

Idealic

The final logo for Idealic, which consists of a crescent moon with two small stars on the inside of the curve made by the moon.

Overview

For this project, I was tasked with creating a native app using Xcode and Swift. To this end, I chose to create a journaling app that I had as an idea a while back called Idealic that would help users keep track of what they felt throughout their day-to-day lives. This process included making assets for the app’s logo in Figma, designing out layouts with Xcode’s Storyboards, and coding out the functionality of storing, viewing, and deleting log entries from the project’s Core Data file, as well as audio for one button.

Adding the logos for my app. The logo is a crescent moon with two stars on the inside of it.

Context & Challenge

For this project, I had to create a functional app with Swift and Xcode, the purpose of which was to learn about the basics of native apps and the process of making them. To this end, I made my app, Idealic, which was intended to be an easy way to log daily thoughts and quickly review them. With other journaling apps, a big issue I’ve found is that they hide basic features behind paywalls, as well as having unintuitive designs. Therefore, I wanted this focus on making my app easy to navigate and relatively simple so the user could create logs without any frustration. My main goals were to design the pages I would need, create the Core Data file, enable functionality to read, write, and delete data to and from it, and make sure my app is free of errors and warnings.

Process & Insight

The homepage of my app on my first draft. the app is mostly the same as the one from the start of this case study, but the top is labeled "Home" before the greeting instead of just starting with the greeting. In addition, at the bottom of the page is a section titled "Your log entries," which has an image of a speech bubble with a question mark inside. under that, there is text that reads, "Hey! You don't have any log entries yet! Get up there and make one!"

Alpha

To start, I needed to design my pages and build them with Storyboards. Since learning Swift was the main focus and I was going for a simple look that wouldn’t confuse the user, I decided to keep my color scheme light with a primary and a background color. To add some visual contrast, I also added a dark blue color. One thing I came across while designing was that my pages were all labeled at the top. After talking to my professor as well as showing the app to a few other people, I decided to take it away because it took up space and the Tab Bar Controller already labeled it. In addition, the homepage was self-explanatory to most people, so I opted instead to just have a greeting message with the user’s name. After doing some work to make sure everything was lined up and would stay in place using Constraints, it was time to move on.

An early version of what viewing logs would look like, without tables. At the the very top is a title that says "Your log entries". then, underneath, there are two placeholder entries that are lined up vertically, one after the other, with the title on top, the body in the middle, and two buttons, one that says "Share," and one that says "Delete".

Beta

Next, I started to work on the functionality of each component. One thing that I ended up running into at this stage was adding functionality to my app that did not contribute to my MVP without having the necessary functions down first. For instance, I would work on the functionality for putting in your name and having it print on the screen, but that was more of an extra feature that needed to come secondary to things like deciding how to showcase logs after they are entered. After coming to this realization, I switched my focus to creating a page to showcase logs and eventually I also chose to get rid of the settings page with some advice from my professor, as it wasn’t needed to finish my MVP.

Another piece at this stage was adding in the audio. My professor has demonstrated how to add this, so I didn’t have much issue putting it in, but I did find myself a bit lost on what sound to include. To solve this, I went back to the logo of my app; a crescent moon with some stars around it. From this, I decided to go with a twinkling sound to suit the theme of stars. I thought about how each log was kind of like a bright star, giving you a waypoint to reflect on. Using this analogy, the twinkling sound could be taken as a new star being added to your own starry sky.

The Core Data file for my project. There is one entity, "logs," which has two attributes, "title" and "text".

Final

Moving on, I created the table to display the logs stored in the Core Data file, as well as the Core Data file itself. This process was more involved than I was anticipating and was probably the most important part of the project. One thing I found was that loading each cell in the table required specific syntax and the documentation on Apple’s development site was confusing to me. Luckily, there was plenty of time to work out a solution since the project had progressed rather well up to this point, and I was able to change my app’s flow a bit to make sure it would be usable.

The final homepage for Idealic. There is a greeting at the top that says "Welcome User! What's on your mind?" with a logo of a moon and some stars next to it. Underneath, there is a narrow text field to enter a title, and under that is a wider text field for the body of a log entry. further down on the right is a button that says "Add entry" and lastly is a button with an image of a book and the words "Your log entries".

The Solution

Link to the repository

Idealic starts on the homepage, which greets you as the user. You can enter a title for a new log, as well as a body, then add the entry by pressing “Add Entry.” From here, you can hit “View all entries” to go to the log page and see what you’ve written. You can see the titles of each entry, and tapping will bring you to a detail page to read the body of your entry as well. The log page also allows the user to delete logs by swiping them to the right and hitting the red “Delete” button.

The final version of my detail page. At the top is the title of the log, "Pepsi vs. Coke," and under that is the body, which reads, "Yeah this one is a no brainer to me but coke wins every time. Like Pepsi's flavor is just not it for me." At the bottom is an image of a speech bubble with a question mark inside. Under that is text that reads, "Got more to say? Swpie down to add more entries!"

Conclusion

All in all, I do believe my app was a success. I was able to create an app in Xcode with Swift that allows users to easily create logs without frustration. I also feel that I learned a lot about how to work with Swift, and I gained experience with its syntax.

One thing in particular that I learned was how helpful it can be to leave time at the end of projects to make sure everything is in order. While not every project can be precisely scheduled and things happen, giving yourself time to clear up loose ends and be critical of your work allows you to make sure that there aren’t any small mistakes like typos, misaligned components, leftover elements that aren’t necessary, and so on. Because I got a lot of my project done beforehand, I had a good week to just focus on quality assurance instead of rushing to finish the required parts of my project. 

Something about Swift that I also learned was how important it is to do everything in Xcode. Moving or deleting files outside of the app can cause the code to malfunction as it writes specific paths to each file, so moving files around in Xcode is necessary so that it can change the paths around as well. I ended up having an error that crashed my app because of it, which was certainly concerning. However, I also had been backing my app up to GitHub, so I was able to get back on track relatively easily. Another lesson, then, would be to push changes to your remote repository often so you don’t have to reset your app back to a point you were at weeks ago.