Native Code is Dead

Although Android has a larger market share when you count it by pure number of devices and users, iOS still dominates monetization. Research I did earlier this year about apathetic Android users still rings true. However, vast improvements in Android as an OS and Google Play as a way to monetize apps are changing this. Not to mention changes to the new iOS 6 App Store are making app discovery even more difficult on Apple devices. A lot of developers are grumbling about their fortunes on iOS and are looking elsewhere.

Platforms are volatile. Five years ago, Facebook was the ultimate destination for game developers. Now it’s a ghost town. iOS is the hot ticket now, but Android is becoming increasingly competitive. As a developer you need to be prepared to move platforms in an instant. For this reason, native code is dead.

Using a solution such as Unity3D, Flash, or HTML5 allows you to easily move apps from one device to another. Or, from mobile to the Web. Or, from Web to desktop. You get the idea. It’s true that each one of these solutions has tradeoffs in features or performance to accomplish frictionless cross-platform porting. However, most studios can’t afford to double their engineering staff to multiply the amount of platforms they deploy on.

If you’re starting a new project from scratch, you have to consider your cross-platform options:

Unity3D

As one of the (very few) detractors said of my recent GDCO 2012 presentation on Unity3D: “This guy was a bigger Unity fan-boy than the company would have been.” It’s true! I am a self-declared Unity3D zealot. My experience moving between platforms has been incredibly easy. You can check this older post on the process I went through to bring Brick Buddies to Android. Unity3D has issues, but it’s the best solution I’ve found yet.

Corona

I’ve not used Corona myself, but did research it a bit when deciding which platform to hang my hat on. I know other developers who have created very successful apps with it. The major drawbacks are it uses Lua as its scripting language and it still doesn’t allow native code extensions. Yeah, I know I said native was dead–but not totally dead. I occasionally have to write native code plug-ins for Unity3D to access parts of a platform’s API that aren’t abstracted in Unity itself. This is a critical feature. Also, Corona can’t be used on the web or desktop platforms.

Flash

Flash has a tragic branding problem. The declaration of mobile Flash’s death doesn’t mean Flash is dead on mobile. This means the browser plug-in on Android is defunct. Good riddance. Flash made the mobile browsing experience on Android unusable.

Adobe has stepped their game up with Flash’s iOS and Android exporters. The packager allows Flash projects to be exported as apps on the target device. Flash’s CS5 exporter was atrocious, but I’ve seen some impressive work with the latest version. Flash even supports native code extensions. Adobe’s extortionate demands for revenue share mean Flash is out of the running for me if I intend to use their more advanced features. Otherwise, it is a superior option over Corona.

HTML5

For game development, HTML5 is insane. If you really want to give it a shot, there are some relatively performant libraries such as impact.js that might help you out. I don’t recommend it. HTML5 isn’t much of a standard, needing a lot of workarounds for various browsers. Not to mention its horrible performance on mobile browsers. You just can’t win.

For non-game GUI-based apps (like Yelp or Evernote) HTML5 makes a lot of sense. PhoneGap/Cordova makes this possible by providing a framework for running HTML5/CSS/JS based applications inside a mobile web view and packaged as a native app. Coming from a native code background, constructing interfaces in HTML5/CSS seems absolutely insane. Friends don’t let friends write HTML/CSS. It should remain purely the output of tools such as Handheld Designer. HTML/CSS is becoming the Assembly Language of the web–it’s good to know, but hopefully you’ll never have to touch it.

Etc.

There are plenty of other options I haven’t mentioned: Moai, Marmalade, Titanium Studio, UDK, and the list goes on. The important thing is to research your platform independent option and find what’s best for you. For games, I’m biased towards Unity–but other options are just as valid…I guess. Obviously there are applications for which native code will always be the solution. Yet, for the incredible glut of dying console game studios “pivoting to mobile,” this is an increasingly remote option.

2011 Year in Review

Location isn’t dead. It’s just everywhere.

When Facebook announced they were killing Places, it was kind of a shock. Several months later it makes total sense. Location isn’t a feature people use apps for. Location is now part of the social web’s fabric.

Instead of a separate Facebook feature, you can now tag a location on to anything: posts, photos, and (yes!) check-ins. It seems like location apps such as Loopt, Brightkite, and SCVNGR have faded as they all ‘pivot’ to Groupon clones or whatever.

Now location is merely an expected feature. I’m willing to bet most people don’t use Instagram primarily because of location. Still, tagging locations on photos is popular. Instagram is outpacing Foursquare for growth. Probably because it’s actually useful beyond announcing “I’m here!” to complete strangers.

Peak Soccer Mom.

Zynga is a monster of a company and congrats on their IPO. I remember seeing Mark Pincus at Cassie Phillips’ very first social gaming conference 5 or so years ago as a relative nobody. This was back when SGN had more funding.

Today, SGN is nothing but a memory. Zynga managed to upend the entire game industry, plunging the old guard into panic and chaos while blazing a trail to a 7 billion dollar valuation. Bravo!

A lot of analysts are disappointed with the IPO. And yeah, Zynga desperately needs new customers. For this reason the company seems like it’s not a growth stock.

Is it a risky investment? Perhaps not. Zynga is the first public company whose performance you can watch in real-time. Instead of looking at guidance and waiting for quarterly reports, just go to AppData and watch their DAUs. If only there was a way to automatically sell a stock once their user retention dropped across the board…

Unity 3.5

The Unity 3.5 beta is now public. The GUI is nowhere to be found–my #1 problem with Unity. Still, it has file locking for SVN and P4V support, multi-select, and a bunch of other small fixes that I’m happy with. Oh, and the Flash exporter really works. Plus, there are some promising new GUI add-ons in the Asset Store.

Console Disruption

The 3DS has been able to pull itself back from the brink with quality software this holiday season. This effort may prove futile as tablets and mobile devices are still pounding the handheld market into submission.

I’m big on the Sony Vita. I even paid extra to reserve the First Edition bundle early. I am fully aboard this kamikaze mission to stuff every conceivable feature in a massively powerful device directly aimed at a market that wants nothing to do with it. A glorious death on the battlefield! I want to see how this turns out–even though a brutal, bloody loss for the axis is seemingly inevitable. Operation DOWNFALL.

Folks I know that got a Japanese Vita say it’s a glorious piece of gaming hardware. However, the 3DS outsold the Vita during launch week in Japan. Not a good sign.

Action Bronson Has The Best Album of the Year

Action Bronson’s Well Done is the best album of the year. The first rapper to rhyme about how to properly cook and serve puffin. Real talk.

Ever see these mystery dots in a Flash CS5 app?

So I encountered what I think is a new issue in Flash CS5. The mystery loading dots. Check the screenshot in this post.

If you ever see this weird black screen with what appears to be white loading dots cycling left to right (and you sure as hell know you didn’t actually write a pre-loader) then you probably have added an asset to your library that doesn’t have the fonts embedded properly. (And you don’t have the fonts on your system)

I couldn’t find any reference to this on the web–I think it has to do with the changes Adobe made to Flash’s font embedding system in CS5. In ye olden days, you’d just see the wrong font. I kind of liked that problem better.

Anyway, this seems to be a brand new but simple problem.

Maybe this is well known in CS5 circles, but it’s the first time I’ve ever seen it!

Weird cycling loading dots seen in a Flash CS5 app

Mystery Dots