Archive for September, 2009

Tell iPhone Devs – Pick Up The Phone!

September 16th, 2009

At 8:45 Monday night, I received a call from an unrecognized number with a 408 area code. As a general habit I do not answer unrecognized calls in the evening. The iPhone said the number originated from Palo Alto, but I didn’t think much of it. 30 seconds later I received another call from the same number. Still didn’t answer.

Soon, my iPhone indicated I had a message: “Aaron, hi my name is ____, I’m calling from Apple. Would you call me back as soon as you get this message, please? It’s regarding a very timely marketing opportunity. 408-xxx-xxxx. Thanks very much. Speak with you soon. Bye-bye.”

At this point, my jaw dropped. This is exactly the kind of call I had been hoping for, but realistically I never expected to get. Standing out in the App Store is difficult, and this could be a big opportunity for the iGarageSale app.

It was late in the evening and I was at home hanging out with my son. I quickly scrambled to get him a toy to occupy him for a couple minutes, and then I returned the call. The gentleman at Apple indicated that they were interested in featuring iGarageSale in iTunes and that they really like the app. However, they wanted me to change a bit of the description first.

Purchasers of iGarageSale receive a free MP3 download of “Holding On” by the independent artist, Mr. J. Medeiros. This is the song featured as background music in the demo video for iGarageSale. Apple was fine with purchasers getting a free copy of the song as this is something that had been legally agreed to with the artist, but they wanted me to remove that fact from the description of the app in iTunes. They wanted people to buy the app for its own merits, not in the hopes of a free bundled MP3. I assume this is also to avoid potential confusion and complaints directly to Apple later, which is understandable. Since they didn’t require me to take away the freebie – just the promotion of it in the iTunes description, I said I’d make the change immediately.

The Apple representative asked how sales of the app were going and I said “OK, but not where I’d like them to be. Certainly having the app featured in iTunes will help!” He responded saying “Well, we’re not promising anything.” Then he chuckled and said, “But you might want to check the App Store tomorrow.”

Three hours later (around midnight), I saw this on the front page of the App Store section in iTunes:

iGarageSale - New And Noteworthy in iTunes

Naturally, I was pretty stoked to see this.

Yesterday was the first full day the app was featured in the New and Noteworthy section of iTunes. So, what kind of difference does it make to be featured?

iGarageSale Revenue Graph

Other peaks on the graph cover things like the first weekend of the release, an ad campaign the following week, pricing promotions, and the introduction of a Lite app. However, all of those events pale in comparison to being featured in the App Store.

So, in conclusion – if you’ve released an iPhone app and you get a call from a 408 number, I suggest you answer!

s3-bash – No newline the secret key file

September 14th, 2009

If you use the s3-bash utilities with Amazon’s S3 service, you’ll find that one of the parameters asks for a file that contains the secret key. There’s important thing to note about this file – it must contain just the secret key without a newline. To check this, listing the file with ls -l should show that the file is 40 bytes. If it’s 41, you’ve got a newline and it won’t work. If you don’t have a text editor handy that will do this for you, you can use the following command to output your secret key to a file without the newline:

echo SECRET_KEY_HERE|tr -d '\n' > secret-key-file

Facebook iPhone Session Proxy in PHP (FBSession getSessionProxy)

September 3rd, 2009

If your iPhone app incorporates the Facebook Connect for iPhone library, one of the first things you will do is instantiate an FBSession object. Developers are given two choices for this according to the wiki:

session = [FBSession sessionForApplication:myApiKey secret:myAppSecret delegate:self];

or:

session = [FBSession sessionForApplication:myApiKey getSessionProxy:myURL delegate:self];

The first option is quick to implement, and an OK option for initial testing. However, it is inherently insecure as it requires you to release your Facebook application’s secret key embedded in your code.

Unfortunately, implementing the second option isn’t straightforward. Read the rest of this entry »