Earlier this afternoon I submitted the first build of Episodes to the App Store. For all who don’t know, Episodes is a native iOS reimagining of my popular webapp Showtime. When Showtime was initially released it was amidst widespread debates over the future of the mobile platform and the significance of web-based solutions over native development. I thought it would be interesting, as a sort of retrospective, to look back at the development of both Showtime and Episodes. To try to decide whether there’s a clear cut ‘winner’ in terms of both the internal development cycle and the final product.
Development
I’ll start from the beginning. Development, for the most part, was fairly straightforward. I began by trying to summarise what I hoped the Episodes application would accomplish and then moved onto thinking about how it could accomplish those things. In terms of approach, nothing changed dramatically between either project. I compiled a feature list, created wireframes, discussed design and interface elements with my designer, and then I got to work.
Books have been written concerning the intricacies of both HTML5 and Objective-C. I don’t intend to go into any great depth regarding the difficulties I faced in developing either application. I would argue that, in terms of development time, Showtime came to fruition well before Episodes even became usable. There are a number of factors here. For one, I’m a web developer by trade. I’ve only recently branched into software development (starting first with an enterprise Mac application, and then using Episodes to get acquainted with the iOS platform). That said, I believe that were I to continue development of native iOS applications in the future, they would see a much shorter turnaround.
When approaching both the iOS platform and web-based development I relied heavily upon the MVC design pattern. Meaning, simply, that I kept logic and presentation separate where possible. In fact, I found the defining factor in terms of development time to not be based on business logic, but rather the creation of views. The simple fact of the matter is that HTML5 and CSS make it easier to style visual elements. I would say that the majority of my development time on the Episodes project was spent subclassing or otherwise manipulating standard UI classes.
In terms of business logic, I would say that the two platforms (or approaches, if you will) are pretty evenly matched. Episodes stores its internal data via CoreData, Showtime makes use of Local Storage. There’s really very little difference in anything logic related. XML is still a pain to parse and deal with. Error handling is still a drag.
Of course, where HTML5 wins in terms of presentation, Objective-C gains in terms of speed. You get more bang for your buck. But is this really something you can hold-up and celebrate? I’d speculate that in a few years client-side solutions such as Javascript will be almost impossible to distinguish from native applications in terms of speed and fluidity.
Testing
For me, developing a native iOS application became particularly interesting during the internal testing phase. This, in my opinion, is where the two approaches really start to diverge. With a web application, you upload it to a live environment and then make the link available to your testers. In order to control the environment you have a few options, ranging from managing user accounts to the extremes of restrictive firewall access.
With the iPhone, restricting your beta testing is certainly a lot easier. It’s just unfortunate that producing the beta build is a lot more involved. You’ll need to use the iPhone Member Center to configure and ultimately sign your binaries for AdHoc distribution. You do this by providing Apple with a list of your beta tester UDIDs. Each of which need to be collected in some form or another, which invariably means having a conversation about how a user can find their UDID ten or twenty times. (If someone tells me they can’t copy their UDID from within iTunes one more time, I’m likely to go thermonuclear).
With your beta builds distributed, it’s time to start collecting error reports. Much to my surprise, this proved to be far, far easier when it came to native application development. There are a few reasons for this:
- iOS devices are, quite famously, a very closed platform. This is frustrating for many users, but a godsend for developers. Because, ultimately, bug resolution is a three stage process: identify the issue (usually due to a user report), reproduce the issue, fix the issue. If a user told me they were experiencing an issue on their device, I could almost instantly reproduce it on my side. This is the antithesis to website development, where stage two of the bug resolution process – reproducing the issue – often involves some form of virtual machine or a specifically configured browsing environment. Which brings me to perhaps my biggest gripe with the pro-web app crowd: web application development may be open, but it’s almost impossible to create a standard build to run across all devices.
You design for the space you’re given. Were I to design a web application to run on the HTC Desire HD, I would need to re-implement the majority of its user interface to work well on the Xperia X10 Mini. Of course, it would run from a technical perspective. But to the end user it may as well not.
- Bug reporting was made effortless on the iOS platform due to the Xcode tool suite. Crash reports sent by users were symbolicated automatically (usually giving me the offending line number) and timestamped by the Organizer in an easily browsable fashion. The majority of issues were resolved in a matter of minutes.
Release
Dun, dun, dun.. Enter the dreaded App Store distribution process. But is it really that terrible? Is it truly enough to turn developers away from native development altogether? After using iTunes Connect (Apple’s App Store distribution medium) for a month or so, I’d say probably.
This section should be a no brainer to the majority of the people reading this. Releasing web applications is just easier. Case closed. But that’s not to say that the App Store doesn’t have its advantages. Take, for example, the fact that Showtime is a free application. Episodes, on the other hand, will run you $0.99c (£0.59p for us Brits). I wouldn’t even dream of trying to monetize a mobile web application in the same way that the App Store allows me to. The bottom line is that for such a lowly one-time fee, it’s just not commercially viable to setup an entire proprietary payment process. Not to mention the time involved in handling refunds, complaints and general administration. With the App Store, that process is taken care of for me. I just have to jump through a few flaming hoops first.
What kind of hoops, you ask? Well, there’s the two months I was without access to iTunes Connect due to an internal error on Apple’s side. That required four phone calls and over twenty-five emails to fix. And then there’s the process of providing all of my tax and banking information (Negative. I am a meat popsicle). Which, I believe, comes down to the heart of the entire debate. It’s that edginess over putting your name, and in some cases your livelihood, in the hands of a company notorious for its secrecy. During my iTunes Connect issues I was left in the dark for days and weeks at a time. I often wondered, what if this wasn’t an evening and weekend project? What if I were relying on this application to put food on my table?
But there are some positives to the iTunes Connect process. For one, it terrifies you. But that’s a good thing. I read a number of unofficial release guides before I embarked on the process of submitting my application. I learnt that, for the majority of developers, applications see their largest sale spike when the application is visible in the ‘New Releases’ section of the App Store. Which, in basic terms, means you’ve got one shot to get everything about your release perfect. This lead me to go through my final testing with an added intensity which I can honestly credit for the fix of a potential crash bug.
Finally, it’s obvious from browsing Google that the iOS platform and the submission process has matured fairly swiftly in a short period of time. Approval turnarounds are significantly better, and the process of generating provisioning profiles, as well as archiving and submitting your application builds are all far more informed.
Conclusion
A number of journalists seem to have developed a ‘piss or get off the pot’ attitude when it comes to the native/web application debate. You are either for or you’re against. When I developed Showtime, I was fairly agnostic. I found the use of HTML5, CSS and Javascript to create an application that felt native to be fairly impressive. Yet, although I have received many subsequent requests to expand Showtime to other webkit enabled devices, it remains an iOS only web application. Why? Because I never approached the project with a ‘write once, run everywhere’ mindset. I don’t believe such a solution can or will ever exist. How can you write an application for a device you have never used? Logistically it’s a nightmare. Ethically it’s a sin.
Which surely means that the iOS platform has won me over? That I’m a proponent for the rise and rule of native applications? Not so much. I’m a tremendous fan of the iOS platform and I believe that, in terms of mobile hardware, you can’t get better than an iPhone. But Objective-C is a steep learning curve for outsiders, and the platform is still as closed as it has ever been. Perhaps the only solace I can find in that regard is that Apple still seem invested in HTML5, given the recent iAd announcements. While I believe Apple will remain fairly shady, fairly secretive, I have faith that their engineers will always seek the best solution to difficult problems.
And that’s all anyone can really hope or aspire to do. To use the best tool for the job at hand.