17 September, 2013

Why iOS betas are developer-only

Less than 24 hours before the day (but not hour or minute) of the officially announced iOS 7 release. As an iPhone 4S user, of course, I'm actually glad the wait is almost over, knowing that at the very least, the redesigned user interface is much-needed due to the hellishly outdated look that is skeuomorphism. However, there are Apple zealots out there that are far more impatient. As far back as WWDC, people screamed their heads off. "Why do developers get it and not us?" was the most common question. And it's a question that has an obvious answer: Because back then, it was a beta release, and beta releases tend to be beta-quality.

What does this mean? Well, there's a redesigned user interface, isn't there? There's over 200 new features as well, right? During the rapid internal development prior to beta release, those features introduce bugs. In some cases, a single new feature may introduce multiple bugs in one fell swoop. Everything from graphics glitches (reports of iPad "pinch-to-exit" causing stutter-frames) all the way to bugs that, when exploited, crash the entire OS, all bugs that new features and APIs tend to introduce. So, out of all those issues, what's the most common one? Most often, the issues are at the application level.

Segmentation fault. Null pointer dereference. Don't these terms raise a bright red flag in your head? They don't to the average user, but to me, you bet they're probably the most common reasons why third-party apps don't work at all on a beta OS, but rather crash on startup or even, in more extreme cases, crash the entire OS. It's because, in addition to new features and new APIs, a new OS also sees the deprecation, and therefore removal, of APIs being replaced by new ones. So, when an app tries to create a new instance (using the "new" keyword) of an object or class that's been obsoleted and doesn't exist, the app has just dereferenced a pointer to a null object, resulting in, what do you know? SIGSEGV being sent to the app, which forces the app to exit abnormally -- a crash.

This pain is just one example of a bug that app developers have to endure when developing apps. There are others, too. For example, some developers will try to create fonts in apps the easy way out by extending system fonts for use as, say, button text or core navigation indicators. So what happens when those system fonts are obsoleted? In the case of iOS 7, the old iOS 6 font, as thick and bold as it was, became completely obsoleted and swapped out for Helvetica Neue Light. Apps that weren't updated to take advantage of said font to make sure the app still works found their entire apps lacking any text at all, no button labels, no descriptions, no core navigation indicators, no nothing, just blank boxes across the board no matter what part of the app they were in -- a serious usability pickle indeed.

Of course, many of these issues would be fixed by now, seeing as though we're only one day away from public release. However, the next time you get all envious, greedy, and otherwise have that "I want it now!" mentality, think about what that means. You may be saying "I want the features now!" or "I want the new look now!", but at the same time, you're also saying "I want the bugs now!" and "I want the crashes now!" and "I want the incompatible apps now!" when you're talking about an unfinished product. A beta, despite how much like the final product it may look, IS an unfinished product, because under the hood, bugs, many of them showstoppers, will do some serious harm to the overall experience.