PHOTIDAY

An education app that delivers daily photography tips to improve your images.

Developer, UX Designer | Native App Development Course | October - Decemeber 2022

The idea for this project formed when I was out with my mom. She has always been on a quest to make better images and with a photographer as her daughter I’m always there to help. While giving advice I learned she wasn’t aware of the AF/AE Lock on her iPhone camera. That got me thinking…what else don’t people know about their cameras and photography? …And viola! Photiday — A Photo Tip A Day — was created.

The goal of this project was to create an interactive app that encourages users to learn a new photography tip a day in order to familiarize them with their cameras as well as teach the basics of photography. Once a tip is learned, the user is meant to put their new knowledge to use on their camera of choice and, if desired, upload them to their user profile gallery to keep track of what they’ve learned.
Camera technology continues to improve in many ways including image quality and capabilities. However, many of us don’t have a basic understanding of how to utilize the best features of these machines that we hold in our pockets or around our necks. This app encourages anyone who has a camera - and that’s everyone - to learn a valuable new skill. Technical challenges included figuring out camera and photo library access as well as getting the layout and functions to make sense for how a user would interact with the app. Each improvement I made was done with guidance from class lessons and tutorials that I tweaked to make my app different.

First Iteration

In it’s first iteration, pictured below on left, the app consisted of a semi-functioning log in page. Once logged in, the onAppear function triggered a random tip from a 2D array to appear.



This tip appears on what I made to look like Polaroids to keep the idea of it being a photography app in the forefront of the user’s mind. By clicking a button below the stack a new tip from the array appeared.

Second Iteration

While the button worked perfectly, after some thought and taking into consideration the user’s experience, I decided that it would make more sense to have a new tip triggered by a DragGesture instead of a button push. To do this, I referenced the Mastering SwiftUI book we used in the course as well as some other tutorials to make it just right. In changing to the DragGesture I lost the randomization function of the button, but in the end decided that the app using a swipe gesture allowed it to behave in a way that mobile users are expecting given the way it is visually presented.

An app meant for learning photography tips is exciting but, it won’t encourage the user to keep the app open for much longer than to read the tip. With that in mind, I added a space for the user to have a profile. On this page users can upload images to a vertical gallery with a caption area to include which tip they implemented on that specific image. The gallery is meant to encourage users to revisit the tips they learned or to reference them while thinking about how to capture a certain subject.



The image and caption are both stored in a JSON feed within the project and that is how the images remain in the gallery even after users navigate away from the app.

Now, on to the most challenging parts of the app development. The first part of that was the camera and photo library access. This was something totally new to me. After some extensive Googling, I found that I needed to access something called a plist — which from what I can tell from reading used to be included in the folder of every project. It isn’t anymore. I did a lot of research and poked around in Xcode until I found what I needed by clicking the main folder and visiting the info section of the target. Selecting the Privacy — Camera Usage Description and Privacy — Photo Library Usage Description did the trick.

Finally, building the functionality of the buttons associated with the camera, photo library, uploading, updating and tip caption was a challenge. With the help of a tutorial and making my own tweaks to personalize it to my app, I was able to build a system that makes sense. Part of this was using a FocusState to prevent the TextField from appearing when an image is not selected. From the guidance of the tutorial, I decided to use an EnvironmentObject to ensure that my main coding page did not become too confusing and cluttered, but still had access to all the functions I needed to call.

Design

One last thought on the process. As seen above the choice in color, font weight, font size and button customization went through some changes. The background on the tip page went from a white background to the gradient featured on the other pages. It feels more cohesive as a project to have backgrounds that look like each other. The font size and weight changed for better accessibility when trying to read tips or other prompts.

The app feels successful for my current skill level and time constraints. There is still so much more I would like to do with it. If I had to change one thing, it would have been sticking to one tutorial to help me build the user profile section.

Next steps include making the login page functional as well as turning the gallery into something that other user’s can comment on to give pointers, etc. I would love to make this app into a community that supports the photography journey of users no matter their skill levels.

To see a walk through of the app watch the video below.