The tl;dr version of this post is:
- Apportable’s platform allows you to “cross compile” your iOS project into a native Android app. (A .apk which you can publish to Google Play, etc.)
- Yes, it works. It’s kind of crazy.
- The folks at Apportable are brilliant, professional, and downright decent.
- You can now try their service for free, and depending on your app’s features, you may never need to pay them a penny.
[Side note: Before I go on, I’d like to answer a question you may be asking yourself: “Why am I only writing this now, 1.5 years later?” Well, I actually wrote a glowing piece about Apportable back when Osmos first launched on Android, and they asked me not to publish it; they didn’t feel ready for an onslaught of developers wanting to use their platform. Fair enough, I thought.]
A lot has happened at Apportable in 1.5 years. When we first began working with them, their platform was far from mature. (Osmos was actually Apportable’s first release!) Their system worked, but it required Apportable engineers to be significantly involved in the porting process, along with shared code repositories and build servers. There were also many details that needed to be ironed out along the way, from language features that needed to be added, to niggly, device-specific issues that had to be resolved. Over time, however, their process has become smoother and smoother. And at this point they even have a “self-serve” option, allowing developers to download an SDK to try for themselves. In full disclosure I should say that we’ve had a unique and somewhat privileged relationship with Apportable, and I’ve only had an early taste of that SDK, so it’s hard for me to comment on the pure, self-serve experience. In any case, it looks like they’re finally ready for “the onslaught.”
So, given our experience, what can I comment on? Well, here are a few items:
A big, obvious benefit is code reuse. With a few #ifdef statements here and there you can have a single codebase across iOS and Android. Apportable’s platform extracts settings from your Xcode project and cross-compiles all your Objective-C, C++, native API calls, etc. automagically. I never had to learn a thing about the Android NDK nor write a line of Java. I’m sure I don’t have to sing the praises of code reuse to developers, but here’s an example: When initially porting to Android, I did a chunk of work to make the game adapt to any screen resolution. (Things were originally hard-coded for iPads and iPhones. Not ideal, but that’s how it goes sometimes.) Later, when Apple increased the size of the iPhone screen from 3.5 to 4 inches, we had very little new work to do. If our Android work had been in Java, there would have been a lot of grunt work involved in bringing these changes back to iOS.
Fragmentation ignorance is bliss
It’s well known: there are a ton of different Android devices and OS versions out there with varying capabilities and idiosyncrasies. As Apportable early adopters we felt some of this pain, one example being how some devices support certain pixel formats better than others (eg. RGB565 vs RGBA8888), but once the Apportable engineers had worked out these details we never had to worry about them again. Personally I’m quite happy to be ignorant on this front, leaving all the countless, ever-changing details of the Android ecosystem to Apportable’s engineers.
I regularly see happy comments from players on the store about how well Osmos runs on their device in terms of stability, feature support, framerate, etc. as compared to other games. This is a testament to the technical strength of Apportable’s platform. Yes, people (thankfully!) like the game, but I believe our success on Android is also significantly due to how solidly it runs across so many devices.
I’ll explain this one via example. Osmos is a procedural game; all levels are generated randomly based on patterns and statistical parameters describing the difficulty of a level. In Odyssey mode, however, each level is always the same, by virtue of the fact that we always choose the same initial (hand-curated) random seed. Unfortunately, the random number generators on iOS and Android are different, and so – at first – all our Odyssey levels looked different from their iOS counterparts. We thought: Oh well, it looks like we’ll have to pick new seeds for each level (27 of them) on Android so that the difficulty curve is more-or-less preserved. When we mentioned this to Apportable they returned with: Well, we can simply emulate the iOS random number generator for you so everything is transparently identical on Android. We smiled and said: Yes, please. Nice to work with people who really know what they’re doing.
Before taking the plunge in 2011 we had significant concerns about porting to Android, fueled by articles like this one about the potentially large support burden it would entail. When Apportable offered to take on front-line support for the Android port, we jumped on it. This has worked out amazingly well. The volume of support email on Android is indeed way higher than on iOS (I’d say roughly 50x), and the fine folks who have handled support for us at Apportable have been nothing short of incredible: professional, friendly, prompt… their responses were often better than anything I could have mustered to be honest. So after an initial “monitoring” period – with a sweet sigh of relief – I stopped looking at them altogether, knowing that if anything required our attention they’d escalate it. Personally I find support email to be very distracting, “costing” much more than the typical minute or three it takes to reply, and so I don’t think I can quite express how wonderful I have found this. (In fact I wasn’t sure I should even mention this point about support, but I looked at Apportable’s pricing sheet, and indeed they still offer this to developers. It isn’t cheap, but I believe it to be worth every penny.)
Well, I hope this is useful to developers who are considering giving Apportable’s platform a try. Any questions or comments are welcome. It’d also be great to hear about other people’s experiences, especially if you’ve tried their new self-serve option, as we can’t offer much insight on that front.