CodeHorizon
It was either 12th September late-night or 13th September early morning, I don't remember. Most of the time I lose track of time and carry on reading or whatever I am doing till I finally feel the gravity pulling my eyelids down.
I was checking my e-mails. There were many email from Codeforces and TopCoder in there, most of them notifying about the upcoming round of algorithmic contests. I realized I had missed a lot of them lately as I hadn't been able to check the mails for a while. Being an insomniac I am always trying to make the most of my sleeplessness. I started writing blogs and weekend projects like - Code-Art, Captain-Bookmark, Jekyll Booklet and some more, thanks to lack of sleep. This time I was trying to figure out the solution to the problem 'How can I lower the frequency of missing good algorithm contests'. And so the game was on.
First thought - design a cool webApp. But again there were many Coding Calendar apps already present, and if I was just going to improve the design of the calendar, I wasn't adding any functional value to the already existing. Second thought create an iOS app. I have been doing iOS development for 3 months now, I was learning to design stuff, I had recently earned a 100$ from Topcoder's Swift Challenge (which I could invest in apple's developer program, and submit apps to appStore for an year). So it was decided, if I can design and develop an app, that I would love to look at and love to use, I would submit it to app Store as my first indie-app (I am one of those guys who likes saying 'we' but prefers 'me' a little but more). So that weekend I downloaded the 15-day trial version of 'Sketch' on my mac, and utilized all the time and brain I could use, to design an app that I would be compelled to download at first sight.
Collecting the materials
I had already found the tool in which I was going to design my first app - Sketch. Next I had to find a data-source which could provide the app with information about all the ongoing and upcoming contests on variety of websites. HacerRank Calendar's RSS was the perfect fit. I collected all the data-data-data I could get to get started, cause I cannot make good bricks without good clay. After a weekend filled with iterate and improve on the design, I did finalize the design, and at-least to me it looked B-E-A-utiful , good enough to get started with the coding.
Coding
This is my favorite part. The next two weekends, 20-21 & 27-28 September , I drowned myself in coding the app, and further improving the design, creating logo and the website. Busy-busy-busy. The one rule I followed while coding is - "Build the app using just code". What I mean is, while using Xcode, you can develop components of the app by using drag-and-drop objects to interpret design into code without worrying what happens backstage. Something like WYSIWYG (What you see is What you get), but I have run into plenty of instances where this wasn't completely true, and hence the rule. It was really fun, translating the design into code one pixel at a time. By the end of two weekends, the app was functional. I could see the ongoing and upcoming events on the app, set notification times, see notifications pop-up on the set time. Something you created is working as it is supposed to be is the best feeling in the world there is.
Submitting to the AppStore
Submission thou art a heartless bitch. It was not easy. I submitted the first build to iTunesConnect and realized I spelled 'Upcoming' wrong - 'Upcomming', had to withdraw the submission. Next submission, I succeed in submitting, but on using testFlight Beta, I realized that as I had used Xcode 5 which did not support iOS8 SDK, the notifications did not work on my device, submission withdrawn. So I downloaded Xcode 6 Beta, uploaded the build, and received the message 'Build rejected as it was built using a beta version'. Next I try downloading Xcode 6's GM version, download fails 3 times on top of slow internet connection. Damn it! Frustration at its peak. I thought to stop for few days, let my mind cool-off and start again. After 3 days, I update iTunes and try downloading again, this time I succeed. Hurray! I built the app using Xcode 6, quickly tested the ipa file on my device, the notifications working fine this time and submitted the app to appStore on October 6, 2014. Finally the submission got accepted and then the 'Waiting for review' phase began. Mission accomplished.
But, I committed a huge mistake in the excitement of submitting the app to the app-Store, that would eventually come around and bite me in the ass. I forgot to test the app on iOS7 device, and the notifications did not work in iOS 7 devices when the app got launched. A minor set-back that I will be fixing in version 1.1. I learned a valuable lesson.
On October 16, 2014 the app was reviewed 'alright' by appStore and my first app was launched. Couldn't contain my happiness when I downloaded the app from AppStore and found it was working perfectly. But the happiness was short-lived. One of my friends installed the app, and thank God he hadn't yet updated to iOS8. He quickly informed me that the notification were crashing the app on his device. I was a bit disappointed and feeling a bit angry. I hunted the bug down, terminated it and submitted the version 1.1 of CodeHorizon to appStore. I am now waiting for CodeHorizon 1.1 to be reviewed and launched to the appStore , this time bug-free.
If you would like to checkout the app, you can do so here. This was my experience building my first app, I hope you enjoyed reading it.