iOS6

This is what iOS Maps selects as my destination when I search for USPTO
This is what iOS Maps selects as my destination when I search for USPTO

I neither lined up for nor pre-ordered an iPhone 5 (lining up for the iPhone 4 on launch day persuaded me that there is no gadget I want that badly), and just placed my order (estimated delivery 3-4 weeks) after debating whether I really want a phone at all for several weeks. It follows that my impressions of iOS6 are based on using it on my iPhone 4.

Flirting with Android

In case you’re wondering: yes, I did consider switching to Android. Indeed, I have bought two tablets — one a Nexus 7, and one a Kindle Fire, since I last bought an iOS device (that would be my iPad first generation 64GB, which I still use daily). The Nexus 7 has done a good deal to persuade me that Android is still essentially an exercise in frustration. E.g. I tried to order my iPhone 5 on my Nexus 7, but its various quirks combined to prevent me from completing the transaction. These quirks are:

  • The keyboard can (and frequently does) become so unresponsive that it loses tap events altogether.
  • Sometimes I simply can’t tap on targets in the browser (Chrome is my favorite browser)
  • I’ve progressed from “quite liking” the user interface to loathing it with a deep and abiding passion

It’s a shame. There’s a lot to like about Android, especially as a developer. Being able to build an Android game directly from Unity without launching Eclipse is wonderful, and I was able to port Manta to Android and post a (somewhat wonky) version in the Google Play store in a couple of lunch breaks. The iOS development experience is certainly a lot less unpleasant today than it was in 2008, but Android is completely frictionless. Of course the net result is that there’s a lot of half-assed crap, like my quick and dirty Manta port, in Google Play.

iOS6 First Impressions

Probably the first thing I noticed with iOS6 is that my iPhone seemed to run a little faster (and it was just fine before), and battery life seems slightly better (maybe 30-50% battery for a day of typical use for me). Not bad for a two-and-a-half-year-old phone. It reminds me of Mac OS X upgrades up until Tiger.

iOS6 Maps App
Directions are much more readable in the new Maps app, and you can flick from stage to stage easily, and get back to your current stage by tapping the arrow button.

The Maps app has gotten the most attention. On my iPhone there’s no 3d flyover frippery, and as far as I can tell there’s no turn-by-turn directions. But the way the Maps app works is insanely better than the old map application (although goodness knows it could easily be further improved):

  • The big green directions are much easier to read at a distance, e.g. wedged on my dashboard
  • You can flick back-and-forth through a series of directions easily (and get back to your current leg with a tap of the “center on me” button)
  • If you tap the “center on me” (or “arrow”) button when using directions, turning it subtly purple, it keeps you centered and automatically steps from instruction to instruction. This is a killer feature and makes the device, in my opinion, superior to a dedicated GPS navigator (or my wife…)
  • You can also pop back to an overview of your route without interrupting anything.

As for the things that could be improved:

  • I assume turn-by-turn navigation will automatically recalculate routes, but I’d like a shortcut for recalculating routes in the direction mode.  Right now, just as in the old Maps app, you need to tap your destination (again), and search for directions (again), and then click the Route button (again) and start navigation (again). Ick.
  • I think that the “purple triangle” mode (follow me and update current stage automatically) should be the default, and not require an extra tap to activate.
  • The way Waze lets you add small detours (e.g. for gas) to a route would, if Waze weren’t a bit of a usability-free-zone, be genius. Steal the idea and do it properly.

I haven’t found the actual directions to be bad (I live and work inside the DC “beltway” so your mileage may vary), or even discernibly different, from the old app’s (or Waze’s). The big difference (and this also applies to Waze to a slightly lesser extent) is that the new app simply sucks at searching for destinations by anything other than exact address. It doesn’t alway fail — e.g. it can find “Smithsonian National Zoo” without a problem — but it fails more often than not. It seems to me that a quick fix would be to pick some search service and attempt to resolve a search that isn’t producing satisfactory results. Even Duckduckgo, which I believe assiduously avoids basing its searches on any information it may have about the user gets a good result searching for the USPTO’s street address. So, it seems to me that Apple could easily fix this problem without going cap-in-hand to Google.

Do Not Disturb is wonderful, but falls in the category of “stuff I was amazed wasn’t implemented in version 1.0”. It lets you tell your phone not to ring or make noises between certain times (and can be toggled manually, e.g. during a meeting). As far as I can tell it doesn’t automatically figure out you’re in a meeting if there’s a meeting scheduled in your calendar. iOS11 perhaps. But, unlike the VIP feature in Mail, it allows you to automatically allow favorite contacts to penetrate the Cone of Silence.

Speaking of General Settings, Personal Hotspot is back at the “root level” of settings — where it belongs — having disappeared into the hierarchy at some point.

Facebook integration is interesting. You can install Facebook from the settings panel. So you can integrate to Facebook without having the app installed, but you can also install the app from the settings panel. Neat. And yes, Twitter integration works the same way and intrinsically supports multiple accounts.

Passbook. I can only parrot the comments others have made suggesting that Apple might have kicked this sucker off a bit more effectively. How about a bunch of discount coupons and some gift certificates ($10 off any iPhone 5 case at your friendly local Apple Store). As it is, I have no clue what this is for right now.

A number of other apps, notably the Phone app, have had significant cosmetic changes for no readily apparent reason. And there’s a few new apps — iTunes U, Find Friends (potentially useful, but I haven’t set it up), and Podcasts — that at least have the virtue of not being folders in disguise (so you can tuck them into folders to hide them if you want).

There’s a new VIP feature in Mail, but I’d rather see support for Gmail’s Priority Inbox (or automagic functionality rivalling it) which seems to work almost flawlessly and required no setup on my part. I thought it might automatically include everyone on my favorites list in contacts, but that might involve not dividing communication into silos (snarl).

Overall, Maps is great but needs work (it seems fine once you give it a street address), everything else is fine, and it seems to run leaner and meaner than iOS5. What’s not to like?

Ustö is quite hard to find using Google Maps
Ironically. Ustö is quite hard to find using Google Maps. I had to specify “Ustö, Sweden” to get any result, and this looks wrong to me.

Nexus 7

Nexus 7, iPhone 4, and Kindle Fire
Nexus 7, iPhone 4, and Kindle Fire

My Nexus 7 (16GB) showed up yesterday — two business days after I ordered it. Shortly after activation I received my $25 of Google Play credit which kind of nullified the non-free shipping (insofar as $25 Google Play credit can be considered to be worth $25).

Cutting to the chase: I like it. Overall, I like it better than the (nearly one year old) Kindle Fire. (I like the Kindle Fire a lot more now than when I got it because of significant improvements to the OS, including password protection for purchases.)

My wife and I recently changed jobs, as a result of which we both had to give up employer-provided iPad 2s, and we’re now using our old iPads when the girls let us. So the contrast in performance between the iPads and the newer Android (ish) devices couldn’t be made more stark, and by-and-large it’s not terribly stark. In flat out performance (e.g. loading complex web pages) the newer devices are noticeably faster, but in general use the iPads are more fluid and pleasant, which seems to indicate to me that there are fundamental architectural issues in Android which are never going to be fully addressed (much as Flash sucked in ways Adobe simply couldn’t fix).

Seven Inches

I find both the Kindle Fire and the Nexus 7 to be totally usable for reading, web surfing, and watching video. If anything, I would suggest they are — overall — slightly superior devices to the iPad for those purposes for the simple reason that smaller size, lower weight, and better performance trump display size.

As soon as it comes to use as a computer substitute, the iPad simply wins. I have bought Sketchbook for all three devices (I have the cheaper phone-centric version on the Kindle Fire). I am a huge sketchbook pro user and I find the 7″ version to be frustrating at best (at least the Kindle OS has been improved such that it’s not horribly jerky any more).

Android v. iOS

As alluded to before, based on the jerkiness of Android 4.1.1 (insert dessert name) on the Nexus 7, Android’s UI/graphics subsystem is significantly behind iOS and it’s not going to catch up. But aside from the niceties of UX animation, I’m not sure that matters. If UX mattered that much, Microsoft wouldn’t have been worth more in 1999 — in inflation-adjusted terms — than Apple is today. Yes, these are different times, but give most people a 30% discount and make their UX clunkier and less tasteful and they’ll say “why yes, I will buy a new PC”. (As Don Norman mentions in the Design of Everyday Things, even his family is not immune — opting for price or features over aesthetics and usability when purchasing things like stovetops.)

Icons: one area where the Nexus 7 is seriously (but trivially) handicapped is aesthetics. While the system as a whole looks quite nice, there are some truly horrible icons. For example, the “Applications” icon — a white circle with six small white squares in it — which manages to be unintuitive, ugly, impossible to remove or replace (as far as I can tell — I’m sure it can be replaced) and locked to the center of the “dock”. There are plenty of butt-ugly icons — the music app is a pair of orange headphones that look like an escapee from Program Manager circa 1994, and the book reader is a blue book cracked open to face away from the user.

System: I find the basic Android “launchpad”, at least for the Nexus 7, to be pretty confusing. The Kindle Fire was pretty bad, but I’ve gotten used to it, and find it quite pleasant now. That said, once I figured my way around there are some ways in which the Nexus 7’s UI is markedly superior to both iOS and (as I understand it not having used it for more than a few seconds) Windows Phone 7. In essence, “widgets” (which are provided by apps) allows you to allocate a subgrid of icons in the launcher screens to be a small panel owned by an app. E.g. a mail widget might display a small inbox.

If there were one feature of the Nexus 7 / Android which I would like to see Apple copy into iOS it would be widgets. On the screen of my Nexus 7 in the photo you can make out the Gmail widget, an analog clock widget (sigh), a calendar widget, and a Flipboard widget.

Applications: iOS is ahead but the gap is definitely closing. Angry Birds — yes. Sketchbook Pro — yes. Tiny Wings — no. Grand Theft Auto Chinatown Wars — no. And, notably, when you try to search for games like Infinity Blade the name autocompletes (it’s a common search) but you get nothing but crapware. Perhaps more importantly, Pages — no. iMovie — no. Apple itself makes nicer software than Google and this has follow-on effects on the ecology that don’t change (just look at how Microsoft’s poor and inconsistent application design degrades the entire Windows ecosystem, or how Apple’s worst missteps — metal! — have been imitated slavishly).

One area where Android excels compared to iOS is its openness. I’ve got Firefox and could easily install one of a number of programming environments that don’t have any of Apple’s restrictions (e.g. Codea on the iPad won’t let you share your code with anyone else, short of email and copy-and-paste). The fact that there are no compelling development tools on Android (that I can see) is pretty telling.

Installing Apps: when I first tried to install an app I got mysterious errors which turned out to be quite common (the solution was to turn Gmail syncing off and on). Once I got it working I found installing new apps markedly quicker and more painless than achieving the same thing in iOS (and I appreciate having automatic update as an option, although I’d prefer it to be on a per-app basis). (Also — hint to Apple — I’d like to be able to delete an app instead of update it.)

Silos: why is there a Message app and a Talk app? Why is there a Gmail app and an Email app? And why a navigation app and a Maps app? If Apple’s insistence on dividing communication into silos based on the medium is annoying, Google’s rises to mystifying. At least on my iPhone I can see email from Gmail, Exchange, and vanilla POP and IMAP in one place.

3D Game Performance: I know that the Nexus 7 should be running rings around the iPad (and iPhone 4) but from my brief experiments with 3d games (I tried Pocket Legends and Space Legends, both from the same vendor, which may be telling) I found games to run more choppily on the Nexus 7. In any event the difference wasn’t marked, so I call it a wash.

Notifications: Android fans make a lot hay over the superiority of Android notifications. Thus far, I’d call it a wash (perhaps Android’s the weird little icons in the sometimes-visible “menubar” will prove to be helpful).

Content Offerings: Google’s Play store is ubiquitous but a tad confusing. On the one hand they offer you the option to get everything from magazines to apps to movies in one place, on the other hand there are a ton of different storefronts that are all slightly different. One thing I found pretty annoying is that it’s not made clear whether the “price” of a movie is purchase or rent (or what resolution is being sold to you). And, in the end, it just seems to be the same stuff sliced up differently (insert joke about Taco Bell’s menu options). In the end, Kindle, Netflix, and Hulu+ all run dandy on the Nexus 7 (I noticed Super 8 was available via Netflix streaming and watched it last night).

Conclusions

None really. I like the Nexus 7, and I think it’s a worthy competitor to the iPad in a Windows vs. Mac kind of way (i.e. it’s not as good, but has some nice things I wish the iPad had, and the price is right). Unlike the Windows vs. Mac comparison, the ecosystem is squarely on Apple’s side (for the time being, at least) — the iPad has a significantly better game selection. Notably, in key areas Android still hasn’t caught up with the original iPad. My Kindle Fire languished largely unused for about six months (I’ve been using it quite a bit since having to return my iPad 2) — I might have more definite conclusions after the rumored iPad mini ships or doesn’t ship.

Let’s Talk iPhone

Apple has, apparently, sent out invitations to an iPhone-related event on October 4. John Gruber says that someone has told him that there will only be one new phone (which is almost certainly accurate). Of course it’s entirely possible that the existing iPhone 4 will become the entry-level phone with 8GB of storage which would kind of qualify as a “new” phone.

The simplest option, which would be underwhelming but still very good, would simply be an A5-based iPhone 4, which could presumably be thinner and lighter (as the iPad2 relative to the iPad) or have even better battery life. If thinner and lighter then expect the camera to be inferior in at least some respect (e.g. sharpness or low light capability) owing to the lack of room. The general consensus seems to be that it will be thinner but have a slightly larger screen.

Apple doesn’t iterate its physical designs lightly. Samsung et al may be able to deliver a dizzying array of form factors on a monthly basis, but Apple takes care over its designs and only changes them rarely. I would not be at all surprised if the new iPhone is very close in appearance to the model it replaces — but “Antennagate” might argue for some more dramatic change. Also, a lot of us would like a less frictionless and easily broken device (mine is in near mint condition, but my wife’s is shattered on both sides).

Possibilities

iOS5. One thing that hasn’t been getting much attention is that while it’s obvious iOS5 will be released, there remain some credible rumors that it will feature as-yet-unrevealed features. Nuance voice recognition and speech synthesis is one possibility. Facebook integration (groan) is another.

A6. Perhaps the most likely surprise would be that the iPhone 5 skips the A5 (which is made by Samsung) in favor of a more advanced — or simply different — chip. This could be purely out of spite (although to ascribe a giant corporation’s behavior to an emotional root is generally naive), strategic based on Samsung’s clear intent to leverage the capabilities and scale it gets from supplying Apple to compete against Apple, or strategic based on Apple’s supply chain problems earlier this year with the iPad2 (was the A5 one of the bottlenecks?).

Free with plan. A “free with plan” iPhone wouldn’t have to be a new product to have a huge impact. Apple is pretty close now (I’ve seen the 3GS offered at under $40 with plan). The real problem here is that if we’re only getting one new phone then we’re almost certainly not getting a cheap model that can connect to networks other than AT&T, Verizon, and kind-of with T-Mobile.

iPod Touch replacement is the iPhone4. An iPhone 4 sold at a reasonable (sub $300) price without any plan requirement as an iPod Touch replacement would be truly awesome. (As a developer I’d actually love to see Android handsets along the same lines, but the only plan-free Android handsets I see are horribly expensive or rubbish, certainly nowhere near as nice as a two year old iPod Touch.)

Improbabilities

Thunderbolt Support would be damn cool but probably suicidal. Of course the cables are insanely expensive still, there’s no easy way to retrofit support into older computers (which most of us have), and it’s not Apple’s style to provide two connection options when one will almost do (we still have a bunch of useless FireWire-to-iPod accessories lying around, for example).

A serious camera option is my favorite crazy idea. Apple could license a sensor and lens mount such as Olympus’s M4/3 or Nikon’s CX system (the latter would be doable with little increase in thickness — and the Nikon J1 is smaller in other dimensions than an iPhone). It might not even be positioned as an iPhone (iTake? iMage?). Such a device would disrupt the camera industry (one of the few consumer electronics industries still actually shipping single-purpose devices and making some money), sucking the money out of its heart the way the iPhone did to smart phones and the iPod did to “Hi Fi”. (Remember when companies like Bose, B&O, and Pioneer were “cool” and sold more than high-end headphones and iPod docks?)

Supposedly the digital still market is projected to reach $43.5B per year by 2015, which presumably means it’s quite a bit smaller right now. Even so, that’s not chump change, and presumably there’s some profit in there somewhere. (Of course, annihilating the camera companies could be a bit self-defeating for computer hardware companies, since they also make tools necessary for chip fabrication.)

Inertial Locator. It seems as though, having embraced GPS, the world has forgotten about the inertial locater, a device (long since reduced to a tiny solid-state component) that determines your position relative to a last known place. Adding an inertial locator to the iPhone would allow it to have a good idea of where it was inside buildings and other places GPS is no good, and also reduce the need to use the GPS system to locate itself (thus allowing more precise tracking of one’s location with less battery power). And even nicer, it wouldn’t require new APIs — so existing location-aware software would simply work better immediately.

Standardized case-with-game-controller. Hey, I can dream can’t I?

A stupidly rugged iPhone for the ages. Textured steel and/or rubber exterior designed to age gracefully, with weather seals and recessed screen. Now that computers don’t become obsolete every 18 months how about we start design shit to last? How many folks with kids would jump all over this? (Literally!)

The Convergence Device

The cellphone and the personal computer are the two most formidable points of convergence in the digital world. The PC has devoured the typewriter, the TV, the telephone, musical instruments, darkrooms, video conferencing, and… Well the list just goes on.

But the cell phone has devoured the camera, the hi fi, the personal organizer, and, with the iPhone, it started devouring the PC in earnest. Right now, the only things an iPhone doesn’t replace a PC for are either because of obvious software limitations (e.g. no file system), intentional limitations (e.g. no dev tools allowed), physical IO limitations (small screen, crappy keyboard) or computing power (speed, capacity).

Given that any large screen can serve as the display of an iPhone, and any Bluetooth keyboard can serve as an input device, really the only thing preventing most of us from simply using our cell phones or cellular tablets as our only computers is a few years of Moore’s Law and better software, both of which are inevitable.

Apple is betting that iOS will be enough of an OS for the vast majority of users. Microsoft is betting that enough people will want a more “complete” PC OS to justify the baggage it’s including with Windows 8.

Yesterday, I visited an Apple Store (my reason is a pretty funny story in itself, but I won’t digress further) and saw about a dozen people, all with greying hair, being instructed on how to use their new iPads. The point here is that the iPad is still too much computer for many users.

I suspect that Google is on the right track with Chrome (the OS) and the wrong track with Android (Android is just too fiddly — which isn’t to say that it can’t be fixed or forked). Microsoft is on the wrong track with Windows 8, but if the Windows part is just a compatibility box that can be discarded later they can adapt as required.

Ultimately, the cellphone has all the advantages over the PC and will subsume it. It’s smaller, more portable, always connected, and everyone needs one anyway. The cellphone is the convergence device.

Typed on an iPad, by the way.

Adventures in Mobile Development

My initial foray into mobile development was to create an iPhone app from scratch using XCode. I wrote a simple mortgage calculator in an evening, and then spent a ridiculously long time trying to figure out how to arrange my signing certificates and whatnot so as to let me actually run it on my iPhone. (I never did get it running on anyone else’s.) Given that I am only superficially familiar with Obj-C and Cocoa, this was not terribly painful. If I could write apps for iOS and Android using XCode and Interface Builder, I’d be very happy. (And, from my point of view, XCode 4 is looking like a huge step forward from XCode 3.)

More recently, I ported my Manta game to iOS.

(Actually, I just realized that my first foray into mobile development, back in 2001, was an attempt to build a Mobile Flash-based multimedia detailing tool for the Compaq iPaq, but I had successfully repressed that memory. You think Flash sucks on mobile devices today? Shudder.)

Lately, I’ve been trying to figure out a good strategy for rapidly prototyping, developing, deploying, and supporting mobile apps for a large enterprise, and it’s been … educational. (“Experience,” Randy Pausch noted, “is what you get when you didn’t get what you wanted.”)

The first step in this latest adventure was an excellent tutorial: How to Create an HTML5 iPhone App (Alex Kessinger). I didn’t bother with his Tetris clone, as I was trying to build a data-driven productivity app, so I simply used his tutorial as a shortcut to figuring out the basics of manifests and the stupid HTML incantations necessary to get a non-scrolling full-screen web app working. This persuaded me that pure HTML5 web apps are a perfectly viable way to go for most business stuff, but you’ll still need to build a minimal wrapper to deploy via an App Store.

I should state at this point that this does not qualify as a review so much as a disjoint set of observations based on generally shallow experience of a number of mobile development options. It is, in effect, a quick brain dump of my current impressions rather than any kind of careful analysis.

Mobile development options range between two extremes: mobile-friendly web pages and Native development using platform-specific SDKs. (It should be noted that if you want to provide a “real” app through an “app store” the platform-specific SDK is pretty much unavoidable, but you might be able to avoid writing all your code in an IDE you despise.)

Mobile-Friendly Web Development

The purest web option is, of course, to simply create a website. You don’t need to do anything except test to see that your website isn’t pathological on a mobile platform (e.g. do you use Flash for UI elements, are your article’s coerced into bizarre multi-column layouts or otherwise broken up in a way that makes them hard to zoom in on and read?).

You can be a bit more mobile-friendly by creating custom CSS to cater for mobile web browsers, including a mobile (or at least iOS) friendly favicon, and possibly even providing manifests and so forth to make some or all of your pages work offline (although working with manifests is an absolute nightmare during development). It’s possible to make web pages look arbitrarily similar to a native app just using a bit of CSS and Photoshop magic, but it’s very hard to create native behavior and responsiveness, and you won’t have access to platform-specific functionality (e.g. the camera or GPS).

Personally, I think that all websites should be mobile-friendly, but making mobile-specific websites is generally a Bad Idea. (Even when done well, e.g. ESPN.com, I think I’d rather just get the “real” site if the real site weren’t horribly heavy.)

PhoneGap + Your Favorite UI Library

PhoneGap allows you to build a “native” app out of HTML and JavaScript by essentially building a mini-site into a simple custom app framework that simply provides an interface between the JavaScript runtime and the underlying mobile OS. PhoneGap doesn’t attempt to solve the problem of providing native look and feel — that’s between you, Photoshop, and the JavaScript programming deities.

Luckily, the JavaScript programming deities have smiled on us and provided both free/open source and non-free solutions to the other side of the problem in the form of jQuery MobilejqTouch, and Sencha Touch. (Sencha being the folk who produce ExtJS, which is a superb JavaScript widget library.)

I should mention that while jQuery Mobile and jqTouch are implemented as jQuery extensions, Sencha Touch is perfectly compatible with jQuery (I actually first learned jQuery and ExtJS together, since I was working on a site that used both). This is hardly surprising since both jqTouch and Sencha Touch are from Sencha! From what I can see (and from this response on StackOverflow) jqTouch was an experiment that got open-sourced, Sencha Touch is what was built based on what the devs learned building jqTouch (and it’s bigger, more complex, and actively maintained library), and jQueryMobile is the official jQuery mobile platform (which may or may not have borrowed stuff from jqTouch, I don’t know). More importantly, working with Sencha Touch is more like pure coding, while jqTouch and jQueryMobile apps are, at the bottom, web pages.

jQueryMobile has, unquestionably, the most impressive website of the three — go to the Docs and Demos pages and then try resizing your browser Window. (Here’s a link, but note that the url seems to be version-specific and may stop working.)

Visual Basic Reloaded

A little further along the spectrum there are Appcelerator Titanium and Ansca Mobile’s Corona SDK which essentially remove HTML from the equation and replace it with a native canvas (in essence, Appcelerator is “Visual JavaScript” and Corona is “Visual Lua”). Appcelerator Titanium seems to have quite a bit of traction (supporting JavaScript is probably a good marketing move) but Corona has probably produced more commercially successful results (Lua is generally more performant than JavaScript).

Corona is more 2d-game focused (your ability to use native widgets is pretty limited, and there are lots of iOS-centric examples of faux native controls) while Appcelerator is more enterprise-app focused (and makes a point of exposing platform-native controls). As a personal aside, Appcelerator is a huge pain in the ass to get going (it is Eclipse-based but requires an appropriate version of XCode to be installed for iOS development and the Android SDK to be installed “just right” for Android development) with while Corona SDK simply provides a very nice simulator that “just works” (it doesn’t do platform native stuff, but works fine for many purposes) that lets you use whatever development tools you like.

If you don’t need a lot of OS-level widgets (and don’t mind learning Lua) Corona is much easier to get up-and-running with. But if you want to create native productivity apps that run on both iOS and Android, Appcelerator is much more capable.

The 800lb 3D Gorilla

Unity differs from Appcelerator and Corona in three key ways. First, its runtime is 3d-game oriented rather than 2d or productivity oriented. Second, its runtime is both more capable in some ways than its competitors because it contains a chunk of Mono (i.e. .NET) functionality and less capable in others because not all native platform capabilities (e.g. browser panels and other UI widgets) are supported. Finally, it runs compiled code against its own APIs. This means that Unity is going to be useless for certain kinds of development (e.g. want Google Maps integration? Forget it) and vastly superior, perhaps even to native development, for others (i.e. 3d games and other realtime 3d stuff).

HTML PhoneGap+ Corona Appcelerator Unity
IDE n.a. XCode for iOS, Eclipse for Android n.a. Eclipse Unity
Native Widgets Kind Of Kind Of No Yes No
Best Feature You’re already done Free Lightweight Native Widgets Awesome Dev Tools
Worst Feature DIY Still kind of DIY Need to build app to see supported native widgets Fiddly to get going Not intended for non-games
Language JavaScript JavaScript Lua JavaScript JavaScript[1], C#, Boo[2]
Price free free $199 p.a.+ $49/month+ $400+
Personal Opinion manifests are a pain to deal with (because stuff gets cached on your iPhone and it’s hard to dislodge) haven’t gotten too far down this road, but Sencha Touch looks great very click, but productivity apps seem to be a poor relation absolute pain in the ass in every conceivable respect love unity but it’s kind of heavy and for productivity stuff you’re on your own

Notes: [1] Unity JavaScript is not quite the same as JavaScript, but it’s easy to get up-and-running if you know JavaScript. [2] Boo is a Python-like language with curly braces instead of parens, and just enough dynamism removed to allow it to compile.

I need a Mobile App tomorrow!

If all you want is a mobile-friendly landing page (and you’re willing to pay), Widgetbox has a tool for creating a mobile “web app” with point-and-click simplicity. I’ve played around with their tools enough to verify that the work, but I haven’t actually tried to deploy their tool so I don’t know how well it works offline (e.g. can you bookmark the site on your iPhone and have it work offline correctly?) It would be pretty neat to have a tool along those lines that actually let you build a proper app.

Going Native

Finally, there’s native development, which I won’t go into. (I like XCode and loath Eclipse so I’m pretty biased.) Aside from producing a truly native app, the iOS SDK has a bunch of functionality that none of these tools match (I don’t know enough about Android to know whether the Android SDK does too). E.g. that way iOS lets you handle screen orientation and user interface transitions is simply light years ahead of most of these tools (where you’re pretty much on your own) and solidly ahead of the best (which would be Sencha Touch).

The Story So Far…

At this point, I should mention two of my biases and get them out of the way. I don’t care for Eclipse, and I don’t like subscription-based models, and Appcelerator Titanium has both. Now, to be fair, my opinion of Appcelerator was perhaps unduly harshed by my having been using Mac OS X [redacted for NDA reasons] on my Macbook Pro which meant nothing much seemed to work (although I also spent a huge amount of time not getting it working on my Mac Pro, which is running 10.6.x). Basically, in order to work, Appcelerator seems to need all the stars to be in alignment and I have yet to get them so aligned. I like the idea of Appcelerator, but thus far I’ve found the execution leaves much to be desired.

Corona SDK on the other hand (which is not without OS X [redacted] issues of its own) was a joy. The download was small and I was able to get the simulator up and running in minutes, and complete the excellent tutorial with no problems. I immediately grokked how things worked and was able to dive into their API documentation and add extra functionality to my toy tutorial app immediately. (Despite not really knowing Lua.) I should add that this is the experience I’d hoped Appcelerator would deliver, but no. (I’d also add that the Appcelerator site has a bunch of getting started video tutorials that never actually seem to get to the point of doing anything interesting. In terms of “five minute demo” Corona SDK has Appcelerator beat.)

The problem with Corona (for me) is that if I’m going to use a game-centric development tool, I might as well use Unity. Corona does have the advantage of seeming lighter (and it’s certainly cheaper). I guess if the right project came along I’d probably consider Corona, but business productivity apps just doesn’t seem to be Corona’s strong suit.

Frustrated by Appcelerator’s lengthy and fiddly installation process (and being forced to use Eclipse) and Corona’s lack of support for native widgets, I started looking at the PhoneGap+ options once more, and I have to say that I’m very impressed by jQueryMobile and Sencha Touch. Simply based on the jQueryMobile doc site (and its “eat your own dogfood” approach), I’m leaning towards PhoneGap + jQueryMobile. That said, I finally managed to get Titanium Developer to launch the “Kitchen Sink” app in my iPhone Simulator, which means I might be able to code with Accelerator the way I was able to code in Corona (modulo a much more cumbersome build/debug cycle).

So, to sum up, I like Corona. It’s lightweight, really easy to pick up and use, and fun. Needing to learn a new and not especially widely used language is a bit annoying but it’s no big deal. But I really can’t use it — it’s not a general purpose app development platform but a 2d game platform (e.g. it has no selector widget, but it does provide a system for managing virtual currency).

I’ve not yet built a PhoneGap app but, assuming it all works as advertised (which is clearly a huge assumption for mobile development), it looks like this is a useful option, but it’s probably never going to be as refined as a truly native application (e.g. none of Sencha’s widgets look native on an iPhone, and a few of jQueryMobile’s widgets are downright ugly).

Unity continues to rule the roost for game development, but it’s virtually useless for what I’m currently trying to do.

And finally, there’s Appcelerator. In some respects it seems like the Holy Grail, but it’s been such a pain in the ass so far that I’ve just spent the last two days scouring Google for alternatives (culminating in this blog post). The fact that getting up and running was so painful isn’t promising, the documentation on the website has strange gaps (“hello world”, anyone?), I find the instructor in their video tutorials to be infuriatingly slow, and I’ve read nightmare stories about bugs in the platform that have brought projects to a screeching halt.

I also don’t see a single example of a “cool app” developed with Appcelerator. What I see is a bunch of giant corporations that are using Appcelerator for reasons that probably make no sense to end-users. (What App does NBC Universal ship and why do I care?)

So, right now, I’m probably going to experiment with PhoneGap and Sencha Touch or jQueryMobile. If not, I guess I’ll bit the bullet. At this point, if I could ignore other platforms and just code in Obj-C for iOS I would avoid Appcelerator altogether. Oh well.

Postscript

I came across this blog post (Martin Kou) in my meanderings. The main takeaway is that the writer finds jQueryMobile to be pretty flaky, and hasn’t tried Sencha Touch but says that it is “purportedly, much more mature and is faster”.