Over the years my blog has transformed from the usual “Wordy geek ranting about first-world problems” content toward more educational and informative posts on what I do for a living: developing awesome iOS applications. I don’t usually talk about the actual applications I’m writing though, since most of my work is on other people’s apps (and I’m not allowed to spill the beans on anything fun). I still consider myself an “Indie” developer though, and just like many other developers out there, I like to solve the problems that I myself face on a daily basis.
In this case what started with me complaining on Twitter turned into a new app due to the resounding and immediate “Me too!” responses I got from some of my followers. And with that I decided to create Docset Viewer.
One of my problems has constantly been related to reading developer documentation in Xcode. When your computer’s overloaded, Docsets take forever to load in Xcode. And when I’m on the go, or am just working from my laptop’s tiny screen, having to switch back and forth between my code view and documentation view is tedious. My only other option is to open up the docs on my iPad, but that doesn’t work when I’m travelling (and don’t have 3G access) or when I’m on a plane. And finally once you do get the documentation onto the iPad it’s horribly slow because of the HTML5 custom UI that Apple redirects you to when you’re accessing their docs from an iPad.
All I wanted was to quickly browse and search documentation from a screen I know I’ll already have next to me, without needing Internet access or an external monitor, that works even when my computer is being buried under Xcode’s bloated load.
The first version of Docset Viewer, v1.0, was very simple and had some limitations I wasn’t too happy with. This is why, with v1.1, I’ve added the following features:
- Download Docsets online or using WebDAV. You can download from one of Apple’s pre-defined Atom feeds, or you can point the app at any Docset atom feed you like to download additional content like Cocos2D documentation.
- Now a Universal app, supporting both the iPhone and iPad.
- Caching of compressed files for quicker access while keeping disk usage low. Instead of extracting the compressed contents, taking up more space on disk, Docset Viewer reads the compressed contents directly.
- Supports “XAR” and Zip archives, as well as standard .docset package directories
- New info pane to show details of a Docset, number of documents, space used, etc.
- Search through the contents of a Docset for quick access, either by API name or by document title.
- Full-screen support.
In keeping with the instructional nature of my site, I’m going to show you a few things that I did in Docset Viewer and how I put it together. Hopefully that will show you how easy it is to take “Off-the-shelf parts” and combine them with Apple’s awesome UIKit framework to create easy-to-build Universal applications.
Over the next few days I’ll be covering the following topics:
- Resuming large downloads with NSURLConnection
- Simplifying development with category extensions
- Using UIKit the way it was intended
If you’d like to give the app a try, hop over to the App Store and check it out.
Update: It’s been brought to my attention that people seem to think I ripped off a competing app’s codebase. I want to state for the record that nothing of the sort happened. In fact my app’s v1.0 release dates back to January (submitted to the App Store on January 19th to be precise), before the competing app was released. I didn’t announce the app back then because it didn’t have all the features I wanted, namely being able to search or download Docsets from Atom feeds; that original v1.0 version required Docsets to be transferred using iTunes document sharing. I feel that competition is healthy, and since I’m very proud of this release, I feel there’s certainly room in the market for any apps.
Since I already have planned to showcase certain pieces of my code that I’m proud of, I hope people will see that my app is not similar to my competitor’s at all.