When I was trying to decide on what to do for my senior research project, I knew that I wanted to develop some sort of application. I decided to make an app that helps students while studying for classes by providing them with a means of sharing information with classmates. From the beginning, I knew that this would be a complex app to build with user management, database storage, user interface design, and much more. Having limited experience in software development from self-studying AP Computer Science to dabbling in web development, I decided to begin my project by using online resources to learn how to make an app for iOS.
Going into this week, I planned on continuing to work through the course material from Stanford's CS193P. However as I gained a better understanding of the fundamentals of iOS application development and the programming language Swift, I decided to dedicate most of my time to developing my own application and putting the remaining course material on the back burner. In the past, I've found that hands-on experience is the best way for me to solidify my learning when it comes to new programming concepts.
While I was out of town on vacation over Rodeo Break last week, I worked on the database design for the backend of my app. I decided to use a table-based database with different tables for the different entities: schools, classes, professors, posts, likes, and comments. These tables act in a hierarchical manner with each school having multiple classes, each class having one professor and multiple posts, and each post having multiple comments and likes. Each entity will contain an attribute that refers to the identity of the entity that contains it. For example, a post for an AP US History class will have an attribute that contains the unique identifier of the AP US History class. This database design ensures that information in the database only appears once, so if the information needs to be altered it only needs to be changed in a single location.
After determining how to organize my database model last week, I set out to apply this model and begin integrating it into my app. Starting out, I needed to create a class in order to connect my backend SDK (software development kit) to my app. This class enables the application to access the database tables for the various entities (user, school, professor, class, post, comment, like). Furthermore, this class allows the app to query the tables for objects and create new objects on the database as well.
After beginning to implement my data model into my app last week, I could finally start using the data stored on the backend database to present information to the user and build out the user interface. When users log in to the app for the first time, I wanted them to be presented with a brief setup process that involves the users selecting the school that they attend, the classes that they take, as well as their first name, last name and profile picture. With all the data gathered and stored from this setup process, the user could begin to use the app.
This week on Monday, Apple held a press event in which they announced a new phone and tablet as well as an updated version of iOS (9.3). Alongside this iOS update came an update for Xcode, the program used to make iOS apps. When I tried to install the update for Xcode on my computer, I ran into some issues. I kept getting an error that prevented the update from installing. After attempting to install the update multiple times, I resorted to completely uninstalling Xcode and re-downloading the 4.5 GB program from scratch. This ended up working for me, and I could once again get into Xcode to continue making my app.
With the setup process complete, I was finally able to move on to the main user interface for the application. I decided to make the application with two tabs: a my classes tab and a settings tab. A tab bar at the bottom allows users to switch between the tabs and allows for future addition of more sections. The settings tab is fairly straightforward with the ability to change the user’s name and school as well as log out. The my classes tab contains the majority of what users will actually be interacting with.
This week, I made great progress on the most important part of the app: the class message boards. This is where users can see posts from their classmates and create new posts of their own to share information, study links or ask questions. This interface is very similar to other social networks. Taking inspiration from Twitter and Instagram’s iOS apps, the user interface has profile pictures, the user’s name, the date that the post went up as well as like and comment buttons.
In the technological age we live in, computers are integrated into nearly every part of our lives. This integration can be so seamless that we neglect to understand just how much we rely on these machines, yet these machines are not perfect. Computers have a lot of components and if just one of them fails, then the whole thing could become useless. That’s what happened to me this week.
This week, I set out to finish implementing all the core functionality of the app by adding the ability to create and delete posts. With this last step complete, I was able to look to improve the overall user experience as a whole. What I found quite frankly is that the app is slow.
After finishing implementing the main functionality of the app last week, I began this week by starting to work on my presentation for next week. I preloaded some data on the backend for a demo of the app. I then recorded the screen of a test device in order to put video clips of the app being used into my presentation. That is all coming together nicely, and I’m feeling good going into my presentation.