I started working on the app that would eventually become Reader for Facebook over two years ago. I started the project hoping to learn a bit about iOS development and figured I’d start with a small simple app that I could code and release in relatively short order. Here I am two years later 🙂
Reader connects to your Facebook timeline and reads your timeline to you using Text to Speech. Its a nice way to catch up on what’s happening on Facebook when you’re busy driving, walking, running, or just relaxing and can’t physically look at your phone. On my drive to and from work I’ll start up Reader and catch up on what my friends and family have been up to during the day.
While the intention was never to create a full fledged Facebook client the app evolved a bit to support basic functionality for liking posts, adding comments, and had to be improved to support displaying various types of content that people post (images, videos, links).
While the development was relatively straight forward I ended up taking several extended breaks from development of the app due to frustrations with the Facebook API. While the API is very rich and provides a lot of functionality it doesn’t always behave as you would expect and has a tendency to stop working or return random errors that are difficult to track down. In fact, the version of the app released today has a bug when comments are posted related to one of these API bugs. Despite the Facebook API returning an error messaging saying the request to create the comment failed it does indeed get posted. After downloading the app my wife successfully posted 4 of the exact same comments due to this bug and called me asking for a refund! (not really but it sucks for your wife to find bugs in your app, after all I try to pretend like I know what I’m doing around these parts).
In addition to various breaks due to frustrations with the Facebook API and just general unavailability the project lost some steam early on when one of the Facebook hackathons was aired on TV and one of the projects was more or less to create Reader for Facebook. With any development project, but especially side projects, its important to have motivation to continue to push forward and I lost the motivation to finish Reader shortly after.
Luckily my wife was there to encourage me and ask me if I had released the app. I had to keep explaining it was nowwhere near complete and I had about 100 other features I thought it needed. Eventually I decided I needed to simplify and focus on the core functionality of reading a users timeline to get the app shipped. After all, the motivation for the project was to learn a bit about iOS development, learn the process of submitting an app, and getting it available in the App Store. While the app still lacks many features I had planned it does achieve the primary purpose and is available in the store (YAY!). If all the users (my mom, wife, and other family) like the app perhaps some of the other features I had thought about will make it into an updated release.
The app was built with Xamarin (which was called MonoTouch and was part of Novell at the time I started the app!). Over time the tooling and overall experience of working with Xamarin improved by leaps and bounds. Xamarin Studio is a formidable, feature rich IDE, that makes developing iOS (and Android) apps a pleasant experience. I found the biggest hurdle to be finding compatible bindings for existing Objective C libraries that I wanted to leverage in the app. Over time, and with the introduction of the component store this improved dramatically…but early on it was a bit rough.
At the time I started the project C# was the only supported language and given my familiarity with the language it was a natural choice for my first app. It allowed me to focus on learning the core concepts and paradigms of iOS development rather then the language itself. I still have a bit of an aversion to Objective C and am glad that I’ll have the option of forgoing learning it in depth now that Swift and RubyMotion are options for projects I decide to attack with a non-Xamarin tool belt.
One of the big headaches early on was finding a text to speech API that worked reliably, and supported the MonoTouch toolchain. I started with Flite, moved to OpenEars, and thankfully with the final version was able to use the built in Speech Synthesizer classes available in the iOS SDK. Voice recognition is still a pain point and has prevented me from adding the ability to interact with the app via voice commands, so hopefully that API will be opened up soon as well. In the meantime I’m banging my head against the OpenEars SDK trying to get “like”, “comment”, “next”, “refresh”, and etc to be supported in Reader. Not to mention the ability to record full fledged comments or posts which is near impossible without shelling out $ for commercial speech recognition libraries.
The only other notable SDK that Reader makes use of is the Facebook SDK. Again, early in the process there were headaches with trying to get a MonoTouch compatible version of the iOS SDK but more recently the Xamarin Component Store has made the process silky smooth. The SDK and API itself is still buggy as all get out but I’m sure that will all be ironed out with Facebook’s recent commitment to API reliability (yeah right!).
At the very early stages of development I engaged with a designer on what at the time was called “TalkingFaces”(seriously, how terrible is that name!). I worked with him on a few iterations of a design but never ended up with anything I liked. Rather then stress too much on the design I pressed on with development hoping that as I made more progress I’d find some design inspiration and simply skin the final app and make it look super perty. As you can tell by the final version, it never did get super perty, but I hope its also not terrible.
I designed the app, icons, and screenshots myself. I had many fights with Photoshop and other tools which was another reason this project took me two years to complete. Somewhat recently I downloaded Sketch and got comfortable enough with it to complete the design items necessary to submit an app (icon, etc.). I’m still no designer but I’m looking forward to learning more about Sketch and trying to improve my design skills. The current app needs a design refresh to add some depth and separation to the UI but I’ll tackle that in an update, shipping was my goal and the current UI was “good enough” to ship.
It’s a relief to FINALLY move this project into the shipped category. I have a lot of ideas for improving the app but in the short term I’m going to take a little break and think about other side projects I want to move along and get closer to shipping.
Oh, and don’t forget to download the app and recommend it to all your friends! Download Reader