Several weeks ago, I talked about how we’ve begun our feature cycle. We’ve actually gotten quite a few items done that you can check out on the Corona roadmap. However, we haven’t hit our stride quite yet because of some difficult challenges related to OS versions. So this week, I wanted to give you a behind-the-scenes tour of some of those challenges, what we’ve learned from the experience, and our plans to tackle them.
Working around Breaking Changes
Last month, I talked about the breaking changes Apple introduced in 10.8. Thinking that we were about to wrap up with workarounds, I had planned to do a follow up on a new public release for 10.8.
Boy was I wrong!
We’ve spent the last few weeks working around even more issues, not just with the Mac, but also with iOS and Android: on Android 4.x, there were breaking changes in the behavior of UI elements that started misbehaving with OpenGL, causing native display object to render incorrectly; on the Mac, an Apple API was leaking and causing the simulator to crash after several refreshes; on iOS, audio would not play on resume because there was a behavior change between iOS 4 and iOS 5 in Apple’s CoreAudio library. There are more gory details on the Corona Daily Builds summary page.
And most recently, we finally found a fix to a longstanding issue on HTC devices. We got some critical clues from some of you last week that helped us squash this one. It turns out that the the implementation of OpenGL on certain HTC devices violated the spec, causing images not to render at all. We’ve corrected it and found a way to do some minor optimization.
It’s fun to share engineering “war” stories over the campfire, but we’d rather spend our cycles on new features, new products, and new platforms instead of boiling the ocean on the fragmentation across OS versions.
We took a step back and realized that we’ve been fighting an uphill battle. Apple and Google have been pretty consistent about making the breaking changes between OS versions. They don’t break everything, but they break enough for it to be a significant distraction for us.
Even without the breakages, supporting multiple OS versions is a lot of work. There are numerous times where we have to implement a feature twice, once for each version of the OS because the OS API changed. We also spend a lot of time making sure you can build one single binary per platform so you don’t have limit your app’s reach. To do that, we have to employ a variety of techniques to make sure everything is backwards and forwards compatible, from weak-linking frameworks to dynamic symbol lookups.
Apple has been particularly forceful with pushing developers to the latest OS versions. Gone are the days when a user could count on using a Mac for 10 years…
Stopping the Insanity
So here’s what we are planning to do:
(1) The next public release is going to officially support Mountain Lion 10.8. As I’m getting a little superstitious, I’m not going to promise any dates just yet. I’ll announce something when we are very close to releasing it.
Also, for those developers using OpenFeint, please be aware that GREE has stopped support for all new OpenFeint games. Therefore, this will be the last public release to support OpenFeint. On iOS, we recommend you use GameCenter. We’re still working on the right solution for Android — there’s a lot of noise out there.
(2) We have decided to stop fighting Apple’s policy — if you can’t beat ’em, join ’em — and will be more aggressive about dropping support for older versions of MacOS X and iOS. Loosely speaking, we will aim to support the last two major iOS versions because consumer upgrade adoption rates have been extremely high. However, depending on features introduced and bugs fixed in the latest version of the OS, we may decide that it makes more sense just to release the most recent previous version. And we’ll of course give you fair warning if that’s the case, and if you gives us good reasons to make a course correction, we will.
For the Mac, this means:
- 10.6 is not officially supported. To ease the transition, we are still permitting the simulator to run on 10.6, but if you want to perform device builds, you’ll need to upgrade to 10.7 or higher, as even Apple doesn’t support 10.6 for iOS or Android (the latest Java security update doesn’t work on 10.6).
- Soon after, you won’t even be able to run the simulator on 10.6, because we want to adopt newer 10.7+ technologies in both the simulator and in MacApp, e.g. in-app purchase, AVFoundation, etc.
- 10.7 is officially supported. However, there are some key 10.8+ technologies we’d like to get in your hands, e.g. Game Center, so we’ll be closely evaluating the benefit of going just 10.8+.
For iOS, this means:
- iOS 4.3 will be supported in the upcoming public release.
- However, all 4.3 users can upgrade to 5.x, so we will likely drop 4.3 as soon as iOS6 comes out.
- iOS 6 beta device builds will be available in a daily build soon after the upcoming public release.
(3) On Android, the predominant market share still is on 2.2 and 2.3 based devices. This may change with the popularity of the Nexus 7 tablet and Jelly Bean (Android 4.1), so we’ll be watching closely.
* * *
In an ideal world, we wouldn’t have to drop support for older versions. But we don’t believe in battling complexity for complexity’s sake. We want to fight the good fight — building more great features and products for you all