Noel

Independent game designer and programmer. Created Subterfuge, Casey's Contraptions, Flower Garden. Runner. Cyclist. Nature enthusiast. Magic addict. @noel_llopis.

GDC 2009: iPhone Development: Exploring The New Frontier

Things have been so busy ever since I got back from GDC that I never got a chance to upload the slides for my GDC presentation. So here they are. You can download the Keynote file directly from here, or view it online.

The presentation went very well. The room was *completely* packed, with every seat taken and people standing along the walls. In retrospect I shouldn’t be surprised because it was the only iPhone presentation in the main GDC conference. Clearly there is a huge amount of interest in the platform. I’m already pushing to have a lot more iPhone content for next year, so you can all look forward to that.

Because it was the only iPhone presentation in the main GDC, I had to keep it very high-level and focused on the question of “what can you expect if you switch to develop games on the iPhone”? Not like I can really answer that, but at least I can share what my experience was. Hopefully next year I can really dive into some juicy tech topics.

In the meanwhile, if you’re dying for some more technical content, go check out my latest column in Game Developer Magazine dealing with multi-touch input devices with the lessons I learned from Flower Garden.

pres

Update: Ari Braginsky recorded the audio of the session (part 1 and part 2), so if you want, you can follow along with the slides. Thanks Ari! I believe that the synced audio and slides will be available through the GDC web site for registered attendees too.

The Importance Of First Impressions

A few weeks ago, I set as my drop-dead, better-be-done-or-I-kill-myself date for Flower Garden to be March 20th. The date getting closer allowed me to focus and put a huge, hard effort. Since I got back from 360iDev, I’ve been working between 18 and 20 hours per day. Yes, that’s pretty crazy, but it actually didn’t feel like a strain because a) I love doing this and b) I can do it from the comfort of my own home. But that’s the topic for another post.

The point is that as March 20th approached, I was slaying bugs left and right. Flower Garden went through two rounds of beta testing and it had some great feedback. All the crash bugs and top priority tasks were done and taken care of a few days before the deadline. Things were looking good for a submission to Apple on the expected date! Yay!

fgThen, with just a day to go, I decided to step back a second. Something had been nagging at me for a bit and I had to be honest with myself. Yes, all the crashing bugs and major features were taken care of. But how come my issue tracking system still had 50 entries in it marked as “Final release”? It wasn’t a big deal. Those were all marked as “low priority” or “trivial”. And that’s the great thing about the iPhone, I can submit the application and then start pushing out updates as I get to the little stuff. Right? Right?

This wasn’t a case of taking Old Yeller behind the shed. The app was looking good. Really good. And it wasn’t just a puppy, but a fully grown, beautiful app. It’s just that it was a bit… slow and rough around the edges.

This is were things got really tough for me. On one hand, I was ready to ship this baby. I have been working on it for almost six months (where did time go??) and a lot of people were loving it. But when I allowed myself to give it one hard look, I realized that the experience I was hoping for wasn’t there. Yes, the functionality was there, but not the experience. With a tool that gets a job done, maybe that’s not a huge deal. But Flower Garden is all about the experience.

I tried to rationalize it by thinking how I could get all those little, low priority things done in an update right away: Improving the performance of the rendering, making the transitions more responsive, adding those subtle animations and sounds, making load times shorter… In short, it was missing the key ingredient to a successful experience: polish. I could always add that polish later, but what about all the people who bought it right away? What kind of impression were they going to get? In a saturated market like the iPhone App Store, and especially with a title aimed at a casual audience, first impressions are everything. If people don’t fall in love with your product right away, you might not get a second chance.

So it was with a very heavy heart that I decided to slip my target date. I really needed one more week to get to the point that Flower Garden could be the experience I had envisioned. And of course, to make it twice as hard, this coming week it’s GDC, so that means that the release date is pushed out two weeks.

Coming from the console world, where updating your game is a rare opportunity and you better get everything right for the big release,I was really counting on releasing frequent updates. Does it mean that updates are useless in the App Store? That we shouldn’t take advantage of them? Not at all. I realized that I was looking at them the wrong way. Updates are supposed to provide bug fixes and new functionality. They are not a crutch for sloppy development and an excuse to release products before they’re ready.

Now I have regrouped. Reassessed where I’m at, and prepared the final plan of attack. If all goes well, I will be submitting Flower Garden to the App Store the last week of Mark/beginning of April. When exactly? When it’s ready. Lesson learned.

San Diego iPhone Developer Gathering This Wednesday

Yes, it’s a horribly busy month.

Yes, GDC is around the corner.

Yes, I’m supposed to ship Flower Garden this Friday.

But none of that is stopping us. Come mingle with other iPhone developers this Wednesday at the Irish Pub in Carlsbad. As a bonus, I’ll do a practice run of my GDC talk about iPhone development (now that’s an old picture!).

When: Wednesday March 18th from 7:30PM until whenever.
Where: O’Sullivan’s Pub in Carlsbad (home of the Appy Entertainment Secret World Headquarters)

If you’re thinking of coming, please RSVP by leaving a comment below or emailing me. That way we get a rough idea of how many people to expect.

See you all in a couple of days!

iPhone Developer Program Gotchas (or what I learned the hard way)

One of the most confusing parts of iPhone development is dealing with the iPhone Developer Program side of things. You know, all that fun stuff with certificates, devices, provisioning profiles, distribution profiles, etc. Oh, the hours of “fun” you can spend with that.

Last night was particularly frustrating because I had just called it “beta” on Flower Garden and celebrated with the requisite victory dance, when the fun of sending out the beta build started. What I thought would be a ten-minute task, turned into a long nightmare and I didn’t get the build out until 1AM.

dilbert

This is not the first time I run into issues with provisioning profiles and distribution in general. It’s a very finicky process, and other developers are going through the same pains. Mark Johnson suggested I collected all the gotchas I’ve learned into a single place so it can serve as a form of reference. That’s a great idea, because the process is so byzantine that I will have forgotten most of them next time I need to do another big submission.

This is not a “how to” document on preparing your builds for ad-hoc or App Store distribution. Apple has the basic flow documented in their site, and other people have also talked about the process. This is intended to be more of an appendix explaining details, clarifying assumptions, and correcting things that are just plain wrong.

To make this more comprehensive, I’d like to open it up to other people’s experiences, not just mine. If you have gone through some pains with the iPhone Developer Program (and who hasn’t?) and found a way to deal with them, please post in the comments and I’ll update this page to reflect it.

iPhone Developer Program

1. App identifier is case sensitive. This is the string you need to enter when you create an app ID through the developer web site, and the one you need to set in your Info.plist. My usual development id is com.snappytouch.* so I can use it for anything I do. But in preparation for sending out the beta build, I created one just for Flower Garden: com.snappytouch.flowergarden. I thought that everything on the build side of things would be fine because my default app ID was: com.snappytouch.${PRODUCT_NAME:identifier}. Unfortunately, this failed to create a working build without any helpful errors. After much hair-pulling, I figured that was because my app is called “FlowerGarden” not “flowergarden”. Changing the app ID in XCode to com.snappytouch.flowergarden fixed that.

2. Easy UDIDs. Forget about asking your testers to go to iTunes and get the UDID from there. Instead, tell them to get BetaHelper and email you all the information directly. Easy and no typing errors!

3. Bulk device upload. I got a great response to the call for beta testers for Flower Garden, so I was left with about 30 new device UDIDs to enter in the developer web site. Entering them one at a time with a slow-as-molasses interface isn’t my idea of fun so I decided to use the bulk upload option. Unfortunately the format isn’t described exactly anywhere, and the errors displayed if the format doesn’t match exactly are meaningless.

The exact format is:

Device ID	Device Name
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx	Whatever name here
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx	Lalalala
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx	Whatever

So, tab separated, not comma separated. First column is the device ID (40 digits). Second is the name, no quotes around it. First line is ignored. Here’s the killer: You cannot have any blank lines after the last entry. And the error message if you do is simply a “Bad format”. Come on Apple, throw us a bone over here! One last thing: You can’t upload a device ID that is already in your database. Really annoying. Still, beats cut and pasting all those IDs by hand.

4. Ad-hoc zip file for Windows users. Apparently it can’t be created with the Compress option in finder because it puts extra files. I used zip from the command line and it worked correctly. (Thanks to Mark Johnson for that one).

5. App Store zip file has to be created through Finder with Compress. I heard that on Twitter somewhere, but needs confirmation. Anyone?

6. Adding provisioning profiles. Forget about dragging them on XCode and manage them manually. Check out my earlier entry about it.

7. Set correct provisioning profile everywhere. And I mean everywhere. You need to do it both in the Info for the target and the info for the project itself. Yes, both dialog boxes look identical and have 99% the same information, but the provisioning profile setting is different apparently. Fail to set it in both places, and your app won’t load in the device.

I’m sure there are a lot more. If you’ve found some of your own, leave a comment and I’ll update the list.

Becoming Indie: 360iDev Presentation

360|iDevHere are the slides for the 360iDev presentation I gave a few minutes ago. They’re in Keynote format. Thanks everybody for coming and all the questions at the end. It was lots of fun!

Session description: This session will cover the experiences of a professional game developer, used to 200+ person teams, multi-million dollar budgets, and 3+ year schedules, who left all that behind to become a one-person indie company developing exclusively for the iPhone. It will explain how things are different and how some things are very much the same, and will show specific examples of graphics technology, development environment, and asset pipeline. I will be using my current iPhone project, Flower Garden, as an example. The audience will learn what the transition is like and what to expect going indie making games for the iPhone.

BecomingIndie.key.zip