The Age of the Internet is a wonderful time to be learning a new technical skill. As a first time app developer working on CoffeeFast for iPhone, I encountered my fair share of cryptic compiler errors, poorly-documented API calls, and bizarre logic bugs. It was a humbling experience to be fumbling around with a new language, new platform, and a new IDE all at once.
Fortunately, I didn’t encounter a single issue that someone else hadn’t already tackled and – thankfully – documented the solution to on the internet. Stack Overflow was ridiculously useful in solving small problems; just about any Google search about compiler or run-time errors would inevitably lead to the solution on Stack. Beyond that, though, this post acknowledges those who took the time to post extremely helpful blogs and tutorials, presumably on their own time, so that strangers could benefit from what they had learned and discovered.
Without the following, CoffeeFast for iPhone would’ve either taken much longer to complete, or would not have been released with the level of polish and professionalism that it does, or both.
- Custom ActionSheet-like menu On one screen, I wanted to display a slide-up modal dialog that contained groups of buttons. From a UI design point-of-view, there weren’t enough buttons to justify the dialog taking up the entire screen. The obvious solution, the UIActionSheet, didn’t look so good with CoffeeFast’s color scheme, plus there was no easy way to group the buttons by function. This “Semi-modal Transparent Dialogs on the iPhone” tutorial by Ramin Firoozye (@raminf) contained all the info I needed to make a pretty slick customized variant of the UIActionSheet.
- Buttons with gradients The standard iOS rounded-rect UIButton is surprising boring. The Imageless Gradient Buttons by Jeff LaMarche (@jeff_lamarche) use Cocoa’s CoreGraphics and QuartzCore to display very nice buttons. The gradients and colors were very easy to tweak to match the CoffeeFast color scheme, as shown in the above image.
- Email integration CoffeeFast includes a button that allows the user to email feedback directly to the support address. This “In-App Email Tutorial” by Mugunth Kumar (@MugunthKumar) was very useful in getting this feature working quickly.
- Twitter integration Another Mungunth Kumar post which shows how super-easy it is to integrate twitter in an iOS 5+ app. I found this so much more simple than hacking together a solution for iOS 4 that I disabled Twitter support on iOS 4 devices.
- JSON parsing I use json-framework, a simple Objective-C JSON parser by Stig Brautaset (@stigbra), in CoffeeFast to parse Yelp search results.
- String cleanup This is a seemingly trivial bit of code to strip special characters out of arbitrary strings, by Dave Addey (@daveaddey), that would’ve taken me a long time to figure out on my own. I use a variant of it for the CoffeeFast shop filters.
- Logo design I’m artistically challenged and not especially skilled at vector drawing programs. Thankfully, I found these Inkscape tutorials for creating a coffee cup, by Peter Anglea and a sunburst, by Josh at Tuscon Labs. My final logo ended up looking quite a bit different than these tutorials, but they were great for getting me started.
- Glyphish Pro icons Rather than designing my own icons, which would’ve taken me forever and looked amateurish, I opted to buy Glyphish icons by Joseph Wain (@glyphish). A huge selection of professionally-designed icons, in PNG and SVG formats, for $25…probably the best investment a small app developer can make. (OK, so that link wasn’t to a tutorial or blog post. But seriously, check Glyphish out.)
- Shiny buttons Round buttons in the style of the standard iOS DetailDisclosure button are used repeatedly in the app (see example images below). These are also Inkscape creations, made by combining the Glyphish icons with a button “inspired” by this shiny rounded button tutorial. I plan on doing a blog post on how to make icon-based buttons like the ones in CoffeeFast in the near future. In the meantime, you can probably figure it out by following the linked tutorial.
Many thanks to everyone listed above! I’m planning on “paying it forward” by continuing to blog on development topics (like my first iOS-specific post on maintaining ad-supported and ad-free UIViewControllers) in the hopes that others will benefit.
(Please be aware that the above individuals have not endorsed CoffeeFast! I merely discovered their posts via Google searches, found them useful, and decided to acknowledge them here. In most cases, I did not use their posted code directly, but rather used the concepts described to adapt their approach to something that worked well for CoffeeFast.)