Space in Stereo iPhone Game Jam Postmortem

A week ago, I sent out a quick tweet asking if anyone would be interested in doing an iPhone Game Jam at the 360iDev conference. The response was immediate and hugely positive, so, with the help of the organizers of 360iDev, we put together an informal iPhone Game Jam.

The idea was to get together Tuesday evening, starting at around 7PM, and to code all night and have an iPhone game (or at least a prototype) done by morning. About 25 showed up, working on about a dozen projects. Participants were welcome to group into teams or work solo. There were no restrictions as far as themes or technology. The only rules were that you had to finish something by morning (no leaving something that was 5% of a game) and you had to start the game from scratch (no finishing a game you had started a while ago).

Continue reading

360iDev: Cranking Up Floating Point Performance To 11

360iDev_speakerHere are the slides and the source code for my talk this afternoon at 360iDev in Denver. Thanks to everyone who came to the talk. I was surprised to see so much interest on this topic, so that was great.

Session description:

The iPhone has a very powerful engine under that shiny hood when it comes to floating-point computations. This is something that surprises a lot of programmers because by default, things can slow down a lot whenever any floating point numbers are involved. This session will explain the secrets to unlocking maximum performance for floating point calculations, from the mysteries of Thumb mode, to harnessing the full power of the forgotten vector floating point unit. Stay away from this session if he thought of reading or even (gasp!) writing assembly code scares you.

GDC Austin 2009: Squeezing Every Drop Of Performance Out Of The iPhone

austinI just put up the slides for my talk this morning at GDC Austin: Squeezing Every Drop Of Performance Out Of The iPhone.

Thanks for everyone who attended the session and for the great feedback so far. If you’re going to be in China next month, I’ll be giving a very similar talk at GDC China.

Session description:

This session will describe the iPhone performance optimization lessons learned through many hours of tuning. We’ll start with an overview of the performance analysis tools available on the iPhone SDK to help you narrow down your performance bottlenecks. Then we’ll cover the best way to set up your render loops, rendering best practices, how to deal with the limited memory, or even how to drop down to assembly to use the forgotten vector floating point unit.

Presentation slides (pdf format)

At The Mercy of Apple’s Whim

We’ve known for a long time that Apple are king-makers when it comes to bringing up an app through the ranks of the App Store. A nice feature on the front page, and boom, guaranteed sales for at least a week. We’ve all complained at the randomness of it all, but we’ve all wished to be there. It’s random, but at least it’s something positive, so it’s a bit like winning the lottery.

There’s a darker side to Apple’s randomness. Something developers have been complaining for quite a while and it’s just getting worse: The approval process.

This is nothing new though. For a while developers have been reporting random rejections by Apple. Some of them extremely unfair and illogical.

A few months ago, if you got hit with one of those random rejects, it was annoying, but it was bearable. Usually a resubmit would get approved in under a week, so it was possible to fix whatever random thing Apple flagged down (or show them that it wasn’t an issue), and resubmit without wasting too much time.

Now things are different. Supposedly 95% of apps are approved (or rejected) under 14 days (although my informal and biased survey shows very different percentages). A mistake from Apple rejecting an app doesn’t cost you a week anymore, but perhaps as much as an extra 3-4 weeks! That’s a big deal for a company that’s trying to time the release of a product.

So far, I had been one of the lucky developers and I never got a rejection from Apple with Flower Garden. Actually, updates were usually approved withing 7 days to the hour (very suspicious, isn’t it?). But my luck ran out and I joined the group of developers hit hard by random and unfair updates.

Two days ago, Flower Garden 1.7, which had been in review for 24 days was rejected with the following explanation from Apple:

Dear Noel,

Thank you for submitting Flower Garden to the App Store. We’ve reviewed Flower Garden and determined that we cannot post this version of your iPhone application to the App Store because your application contains pricing information in the application, located in the “More Games” page. Providing specific pricing information in this location may lead to user confusion because of pricing differences in countries. It would be appropriate to remove pricing information from your application.

Once these modifications have been made please upload a new binary using iTunes Connect

Regards,

iPhone Developer Program

I was completely floored when I read that email. So apparently displaying a web page with prices for other apps is not allowed unless you localize that based on the language settings of the iPhone. How many apps are doing that? I doubt many (any?) are doing it. I can certainly bring up piles and piles of other games that are showing non-localized prices. But precedence is clearly not an argument with Apple. Even previous versions of Flower Garden had that exact same view with prices and it wasn’t a problem! Random reviewer strikes again.

But wait, there’s more. The prices are shown on a web page fed through my server. I made that change in 30 seconds and emailed them back, hoping they could simply re-test that functionality and approve it on the spot. No, that would be too easy! I had to resubmit a new binary and start the approval process again! I just gave them the change to cut back their work to a fraction of the time (supposedly they had tested other things that they’ll have to re-test because they have no way of knowing I didn’t change/update anything else). Sigh! I resubmitted it and I’m hoping for a quick approval, but somehow I’m ready for another 24-day wait.

So this morning I was excited to receive another email from Apple, I open it and…

Hello Noel,

Flower Garden Lite cannot be posted because it is a feature-limited version. Free or “Lite” versions are acceptable, however the application must be a fully functional app and cannot reference features that are not implemented or up-sell to the full version.

Users can view unlockable seeds on the “Seeds” tab but cannot access them in the Lite version of the application. Please refer to the attached screenshot for an example.

Please upload a new binary and correct metadata using iTunes Connect .

Regards,

iPhone Developer Program

and they attached the following screenshot:

IMG_0014

Users can be unlockable seeds but can’t unlock them? If you follow the included tutorial (2 messages) you unlock the first one. Another message tells them that growing the second seed unlocks the last one. Did they read that, or did they see a locked seed and had a knee-jerk reaction?

I replied to their email right away and explained how to unlock them. I’m afraid I’ll get an email back tomorrow asking me to resubmit and throwing Flower Garden Lite at the back of the queue. I hope not, but I’m prepared for the worst.

It might just be slightly annoying for hobbyist developers, but all of this is making the App Store very difficult to build a reliable, sustainable business around it. The lack of visibility, random approval process, unpredictability, and lack of direct contact make it impossible to have a reliable process or combine release dates with other events such as PR or marketing campaigns. At this point, I would even consider a “professional” iPhone developer account that costs $1K per year and gives you a direct contact in Apple and better visibility and predictability with the approval process. Otherwise, if things continue this way, I’m afraid that professional developers will only put up with this for so long and are soon going to consider the iPhone as a secondary platform and they’ll move on to other pastures like the PSP Mini or new opportunities that come up.