So here is a little history on how GPSNotifier came to life.
Initially the work on GPSNotifier started for a completely different project which was location based. The development started mid august 2010 when iOS 4.0 was the latest version available on the iPhone. The work on this application was initially to build the initial prototype to validate that everything was working as expected.
After a couple weeks of prototyping, this application was working nicely. The next step for this application was to get a good and well designed user interface, so after searching the internet, I did contact a User Interface designer in Europe that had some solid reference with various applications already in the AppStore.
Everything was going smoothly an the user interface was coming along really well. Then Apple released iOS 4.1… and after upgrading to it, the prototype application started to show some really weird behavior. After spending hours looking at stack traces, adding more defensive coding in area that were supposed to be safe, the prototype was still crashing when executing code related to the Core Location framework.
This is around the time when I posted some questions in the iOS Apple support forums, and then discover to my surprise that I was not the only developer with such problem. iOS 4.1 was released and one important feature in Core Location was broken, as many other developers reported. The broken feature for Core Location is related to significant location changes, where such event when being dispatched to an app will end up crashing the app somewhere deep inside Apple stack.
Unfortunately with a platform like iOS the adoption rate of a new OS upgrade from Apple is usually quick, often a matter of couple weeks before reaching more than 50% of the devices. The impact on my current application, and user-interface was major : I could not release the application since most likely it will be rejected by Apple because of various crash, but more important even if it was approved, the user’s review will have been terrible since the application will have worked only partially before crashing.
I decided to put the development on hold until iOS 4.2 will be released, which at the time was at least 2 months away. I had various other side projects and consulting work to do, so I was seeing it as a temporary set back.
Then early October there was an interesting post on Hacker News with the title “Let’s make November Launch an App month“. The idea of having an app launched in November was quite interesting, and since I had already learned a lot about the new features of Core Location that came with iOS 4.x, I was thinking that I should be able to come up with a new application that could be done in a few weeks.
Keeping in mind that Core Location was buggy in the area related to significant location changes, the main new feature from iOS 4.x was “Region Monitoring”. Apple even provide in the developer documentation ideas on on such Region Monitoring can be used:
You might use region monitoring to alert the user to approaching landmarks or to provide other relevant information. For example, upon approaching a dry cleaners, an application could notify the user to pick up any clothes that had been dropped off and are now ready
Interesting ! And looking the API, it was not that much complicated. The next step in the process was to investigate how many other applications in the AppStore where already offering such features. No surprise there was already a few, but most of those applications user-interface were either ugly or just “so-so”. So the more I was looking the existing apps, the more I was convinced, that I could get a good application using Region Monitoring implemented and launch before the end of November.
So that’s how I decided to write the application GPSNotifier : an alarm application based on GPS location rather than time. Since the Clock application is an app provided on every single iPhone, it made sense that my application should follow a similar layout as the Apple existing application. In addition, I decided to make a list of the required features for a good and solid 1.0 version, and push back on any other features : keeping in mind that the app had to be launch before the end of November.
One of the feature that I did not really find in any other application was a simple way of viewing the area monitored by a region. It was quite surprising since iOS 4.x and the MapKit framework provide all the appropriate API to get such are displayed on a map. So on my requirement was for the user to be able to see the area covered by a GPS alarm when defining one.
While developing GPSNotifier, I realize that I could develop a free / lite version which will have a limit of 1 GPS alarm, and a full version. Additionally anyone that will download the free version could upgrade/unlock the lite version by purchasing an unlock using the “In App” purchase system provided by Apple.
After many weeks of development and tons of testing daily, driving and checking the application logs when back at my computer, GPSNotifier 1.0 (view in AppStore) was finally released in the AppStore on November 16th 2010. For some reasons that I can not really understand the Lite version which was submitted at the same time was not approved the same day, nor the following day… In fact GPSNotifier Lite was approved only on November 30 (view in AppStore) ! Don’t get me wrong, I am glad it is now approved and live in the AppStore but I am surprise on why it took so long to get the Lite version tested and released.
So after a few weeks of work, I am finally happy to have both applications released in the AppStore, and meet the goal of the Hacker News challenge to get an app launch in November.