Since OS X 10.7 (Lion) Apple allows in-app purchase (IAP) of features or content in Mac Apps, similar to how it works on iOS but without some of the advanced features of iOS, like subscriptions.

We converted one of our applications, Cashculator Free to use in-app purchase to unlock full feature set, similar to the regular Cashculator we have in the store and on our own website. I believe it was one of the first applications to use in-app purchases in the store, we put it on sale less than a week after Lion shipped.

The issue

We started to receive support requests from customers that purchased the “unlock” feature but the application was still acting as “locked”. All they saw was a message that the transaction failed, with a very descriptive “Unknown Error” message, and nothing more. The really appalling aspect of this was that they were charged for the purchase ($20 to $30 in our case) but the transaction was marked as failed, the reason being “unknown error”.

Needless to say, such behavior doesn’t make the customers happy about using your app, not at all. Some of them originally thought that they failed to purchase. Imagine how surprised they were to receive a receipt from Apple a day or two later for their “purchase” which didn’t work.

Now what?

The first thing I did was to validate that the transaction was returned in a failed status from Apple’s servers. I had some logging left in this part of the code and a user sent me his console log, which confirmed this. So I started to suspect that it’s an issue on Apple’s side.

I started a thread (Mac developer account required) on Apple’s developer’s forums, in the Mac App Store section. I posted it on Aug 12 and specifically asked if any Apple folks can help with this. Only 3 days (and many support incidents) later another developer wrote that he also had similar issue with his app. I filed a bug report with Apple.

To get more attention of Apple to this, I sent the thread to an Apple evangelist and he replied that he forwarded it further. I hoped for a quick resolution now. Unfortunately, many days have passed and I have seen to reply, not on the bug report nor from the evangelist (whom I emailed several days later, asking for an update).

So far I only knew that the failure happened for many customers but not for all, which even more signified to me that the problem lied within Apple.

Only on September 11 more developers joined the thread and expressed similar frustration with angry customers and 1-star reviews on the Mac App Store for their apps.

One of them filed a DTS incident with Apple for his application and they replied that his code is OK and that the iTunes Connect team was onto this. Some confirmation, finally. Customers were still leaving bad reviews, asking for refunds etc.

I tried to put more pressure on Apple and contacted editors at Macworld magazine, hoping that media will be able to push on Apple more than a thread in the developers forum. It’s been more than a month now that Lion shipped. I told my story but even after several days Macworld didn’t publish anything and didn’t follow up with me further.

The resolution

Finally, on September 16, developers in that thread started to report that suddenly things appeared to be working. And even previous customers who received the errors got their application unlocked.

Apple never really ackowledged that there was an issue with this, didn’t close my bug report, didn’t delete all the 1-star reviews that angry customers left and didn’t compensate the affected developers for their financial loss. Nothing.

I’m glad that Apple finally fixed this, as we have just converted and put our second application with in-app purchase, ImageFramer on the Mac App Store. But I’m really not happy with the opaque way in which Apple handled this. Apple is usually opaque in its processes and we accept it, but taking people’s money and not delivering the product (instead referring them to the developer for support) is way not cool. Having this issue for more than a month and keeping it secret, while developers and customers suffer the consequences is plain wrong.