PoopTracker 1.0 is the first iteration of many iterations of my app, PoopTracker.
This was made during the time of my university hiatus in Winter 2016, where I set aside some time to learn iOS Development to pursue my dream of becoming an iOS Developer.
It was written in Objective-C because that was the standard at the time as Swift was still a baby.
As this was my very first iOS project that was not a simple tutorial, I faced many challenges and made lots of mistakes. But I also learned a lot and had a lot of fun.
The code is absolute garbage, but I'm proud of some of the stuff I accomplished at the time when I was just a wee beginner. I have the code here just so I can look at it for nostalgia.
Below is something I had written at the time, before I got busy with school and before I knew I would make more iterations in the future.
People always ask, "Why did you make an app about something so smelly?"
- LEARNING: I thought it would be a great first app to learn iOS. I was right about that. I learned a lot making this app.
- STATISTICS: Statistical reasons. I LOVE tracking things. Inspired by my favourite app, aTimeLogger 2 (a time/activity tracker), I wanted to make something like it. I love being able to view statistics and trends about myself. I enjoy using trackers such as aTimeLogger 2, trakt.tv, and Fitbit.
- HEALTH: We need to make sure we're healthy in that aspect, right?
- GATEWAY TO PRODUCTIVITY APPS: I have a big idea for an app, but I wanted to make all the mistakes with my first one so I could learn from them and make an awesome app next. There are a lot of productivity apps out there, but I find that they could all be better.
TL;DR: Main point of the app was to learn iOS, and also have fun with it even if others think it's silly.
I didn't want a simple tracking app. I wanted something simple, yet complex at the same time. You can log anything by making a simple list, but I wanted to make it easier for the user to be able to view what they've tracked in a much more meaningful way.
- Adding entries with date, end date, duration, toilet paper count, type, colour, details, comments.
- Start, Stop, Cancel an entry to record exact start and end times. Stopping will result in the edit view to pop up to finish adding the entry.
- Edit, delete, (share to be implemented) by swiping.
- Stats page
- Pie charts for type, colour, other details.
- Calendar visualizing the poops.
The app is not quite ready yet. It's definitely functional, but I need to make sure that it's both stable and efficient enough to be released to people.
- Line graphs of each attribute. This way you can see correlations between attributes.
- More themes!
- A lot of code refactoring.
- Save State. I did this for some view controllers, then redid those view controllers, and haven't implemented it for everything yet.
- Efficiency improvements. The goal is to prevent iterating over the list of entries every time an entry is added/modified/deleted. Right now, it does do this, but that is because I only wanted something working before making it more efficient. As of now, statistics are not calculated by iterating the entries, rather the statistics itself is being saved and updated as entries are being updated. There is a chance of inconsistency by human error, but it is a trade-off worth making.
- iCloud sync
- Export/import to/from csv, export to email.
- Passcode protect
- Sound effects &am; Animations
- More info with the pie charts
- More options
- Sharing entries (for laughs)
- Better UI for stats page - it seems weird right now.
- Better icons - more official looking ones.
- Make it look great on iPad.
- Other improvements
I used some third-party libraries (mostly found via Cocoa Controls) which made things a lot easier. I tried my best not to use them because I wanted to write my own code, but some things require a lot of code!
- KYCircleMenu - although I didn't directly use this, I did use it to make my own. See, this one had exact positions for the buttons and it had to be a circle, which was very limiting. It was also a bit excessive for what I needed. I did some trigonometry and was able to start the circle at any angle and end at any angle, and the buttons would dynamically fit itself within this circular arc. It was a pretty big accomplishment for me. I actually used trigonometry for something.
- XYPieChart - awesome pie charts
- FSCalendar - calendar
- RFQuiltLayout - for the stats collection view
- MGSwipeTableCell - for swipe to edit/delete/share
- KTCenterFlowLayout - for the pie chart legend to be centered
Things I Learned
- I somehow always felt accomplished after 2 hours of coding. Could be that I always planned exactly 2 hours of implementations or ???
- Plan the UI design of your app because you won't know where to put stuff and what you need to implement.
- Plan, plan, plan! I ended up redoing a lot of things because I implemented things with no concrete plan. I had pictures in my mind, but that was not enough.
- iOS things. Opened my eyes to how apps are built! Most fascinating thing I learned: table cells are reused!
- So much more! It was an eye-opening journey.
It's not on the appstore yet, so here are some images.