i’m so full of ideas

Archive for the 'itunes app store' category

iPhone cert FUD

February 12, 2010 9:24 am

I finally got around to installing Snow Leopard on my MacBook Pro. I don’t believe in putting a new operating system on top of an old one, so I started over from scratch, on a brand-new hard drive. Which explains why I waited so long. Installing everything from scratch is torture.

A couple of days ago, I could no longer postpone reinstalling all the dev certs and crud you need to make iPhone apps that you can put on real iPhone hardware. As I was installling all that stuff, I encountered this interesting text from Apple’s developer website, concerning development certificates:

It is critical that you save your private key somewhere safe in the event that you need to develop on multiple computers or decide to reinstall your system OS. Without your private key, you will be unable to sign binaries in Xcode and test your application on any Apple device. When a CSR is generated, the Keychain Access application creates a private key on your login keychain. This private key is tied to your user account and cannot be reproduced if lost due to an OS reinstall. If you plan to do development and testing on multiple systems, you will need to import your private key onto all of the systems you’ll be doing work on.

Well! From the sound of that, you would be forgiven for thinking that, if you don’t back up your private key, you’ll be completely dead in the water, never to write another iPhone app again. That’s certainly what I thought when I was setting this stuff up the first time, about a year ago. So I did just what they told me to, and I backed it all up. I was reading somebody else’s blog recently that claimed the text quoted above was literally true. Which is why I’m writing today.

Actually, no. If you don’t back up that stuff, you won’t be dead in the water. I found my cert backups from a year ago, and tried to use them, but it was just too painful. Nothing about Apple’s iPhone code signing process makes much sense. When you get stuck, it’s best to just blow everything away and start over.

Which is just what I did! I removed everything from my keychain that had anything to do with iPhone development, I threw away all my provisioning profiles, and I started over from scratch. It went a lot easier this time. I think I’ve finally been doing this long enough to understand a few of the concepts.

From the sound of it, I think the only time you’d really need to follow Apple’s backup device is if you plan to use two or more Macs for iPhone development simultaneously. I’ve never needed to do that, so that’s one less thing to worry about.

willow weep for me

February 2, 2010 10:53 am

Last year I went through a whole bunch of different ideas for iPhone apps I might write. I dawdled for way too long, spent too much time working on apps that I ultimately scrapped, and generally wasn’t very efficient with my time. But I finally got something into the app store in June of last year. I made it free, because I wasn’t sure how it would go over. Taking people’s money is Serious Business.

I released a card game that I call Hearts Solo. It has been pretty popular. To date, it has been downloaded by 27,942 people. Of that number, 5,536 upgraded to version 1.1.0 when it was released. So I felt that I had adequately paved the way for a better version that I could charge real money for.

Once again, I took way too long with the follow-up. Adding network play turned out to be pretty close to the hardest programming challenge I’ve ever attempted. It sounds easy enough, especially since I’ve done so much network programming in the past, so I can’t explain it. My best guess is that I didn’t choose a very good internal structure for the code. The practical upshot is that it took me about six months to finish.

I put Hearts Net on the App Store on Friday the 29th at $3.99. Two people got the game with promo codes I handed out. A third person bought it with actual money, but I happen to know that it was because she doesn’t know how promo codes work and screwed up, because she emailed me about it. So I lowered the price to $1.99, and the next day I got six sales, none with promo codes. So I figured, hey, things are looking up. The next day, five sales. Yeah, this is not looking good. So I made the game free, hoping that will help get the word out, and I can start charging later.

Yesterday was the first day that the game was free. Total downloads: 1,717. My best day before this was when I released version 1.1.0 of Hearts Solo. It was downloaded 590 times on July 31.

SO. Here’s what this says to me. There is an awareness of my game among the people who might want to play it, and a fair amount of demand. Quite a few of those people are playing it. I gave them a free version to start, so they know what they’re getting into. But they’re not willing to pay even $1.99 for it?

Come on. Really? Not even $1.99? You’re breaking my heart here.

app store progress

August 6, 2009 6:40 pm
Hearts Solo downloads

For the first month of its existence, my game was ticking along at about 200 downloads per day. I have no experience with this, but that seemed pretty good to me. Then I released 1.1.0, which is what caused that spike you see near the end there. On the first day: 192 new downloads, 949 upgrades to the new version. Second day: 576 new downloads, 1100 upgrades. It’s tapered off since then, but downloads are still significantly higher than they were before the new version came out.

According to the records I get from Apple, 6707 people downloaded version 1.0.0 of the game. So far, 3936 of those people have upgraded to the new version. Let’s hope you are all still so loyal when I get around to releasing the paid version. Heh!

App Store rite of passage

June 25, 2009 5:21 am

I just got my first iPhone app into the store! iTunes link This can be a traumatic experience for many developers, and we all learn more about what the process is like through blogs, so here’s my own war story.

I submitted my app on June 14, 2009. It went live on the store on June 24. Let’s call that ten days. Better than some, worse than others. Plenty acceptable for me.

You’ve no doubt read about the horrors of trying to get your app properly signed for deployment on hardware devices and for distribution through Apple’s store. It certainly happened to me as well. I’m not going to go into all the details, because I followed so many dead ends that I’m not sure what I did anymore. I’ll mention the main thing that bit me hard, though. My app’s name has a space in it. When Xcode expanded the ${PRODUCT_NAME} variable into my app’s identifier, it replaced that space with an underscore. This worked fine for ad hoc builds, but the app store flatly refused to accept it. The error message I got didn’t tell me what the real problem was. After much googling and reading other people’s anguished cries, I solved it by removing the underscore. It looks like current versions of Xcode expand spaces to dashes, which is hopefully acceptable for distribution.

I was most worried about HIG violations. I did a lot of things in my app that are not very, um, “Apple-like.” My game has extensive settings, but rather than creating a settings bundle, I put them into a tab on my tab bar. I spent quite a bit of time writing a view controller that uses a UIWebView to display help pages, complete with back and forward buttons for navigation. None of Apple’s apps seem to have any help text anywhere. Apple wants you to use your Default.png to make it look like your app loaded faster than it did, but to me that sounds like lying, so my version simply has the word “Loading…” on it. I created an “about” page. Perhaps worst of all, I created a view that displays the app’s memory usage statistics, which will probably confuse the hell out of most people. I very nearly took that out of the final app. But Apple didn’t give me any trouble about any of that stuff. My app sailed through the approval process with nary a peep.

Based on other people’s stories, here’s some problem areas I might have avoided. I made sure that my artist used more or less the same content for the app’s 57×57 and 512×512 icons. I read somewhere that Apple doesn’t like to see version numbers below 1.0.0, so that’s what I used for my app, although most of my projects seem to languish in the 0-dot-something range. I didn’t use any of Apple’s tab bar graphics, because they all have predefined meanings that don’t match what my tabs are for. I didn’t use any undocumented API calls, although I was sorely tempted a few times. I guess that was enough to keep me out of trouble, in this particular case.