So, Gibberish has finally been approved in the App Store. I’ve added an In-app purchase, but it’s a bit more expensive than subscribing on the web. So, it might be better to avoid subscribing through the app if you can.
When I submitted the original version, the app reviewers asked a few questions about the business model. Then the Mac version was rejected, but the iOS version was approved, despite my providing the same answers. Talking to the Mac app reviewers felt like talking to a wall. No amount of persuasion could get them to change their minds. Does this mean companion apps to a paid web service are no longer allowed in the App Store?
I considered “running to the press”. I considered filing an appeal. And since you can sideload apps on the Mac, I also considered launching the iOS version as-is, then offering the Mac version as a direct download. But then I started thinking about what could happen in the future. What if I run into a picky app reviewer next time? What if an important bug fix update gets delayed because the reviewer wants me to add IAP? Apple says they won’t delay bug fix updates, but there’s no guarantee that every reviewer will follow this.
So, I decided to bite the bullet and implement in-app purchase.
StoreKit is great if you want to implement an in-app purchase that unlocks some functionality. But anything beyond that is not straightforward, especially if your app has a server component. I think more developers would be willing to do it if it were easier.
The documentation is quite limited. This RevenueCat blog post is probably the best place to start. Then you have to go through WWDC videos to understand what’s happening. Sometimes, you have to watch videos from the previous years to understand the context.
There are things I still don’t understand. How is the data
array ordered? Is the first item in lastTransactions
the most recent one? Does revoked
in the status
field mean the same thing as the REVOKE
server notification? Apple didn’t explain these things, and it seems like nobody else has either.
And I don’t know how to test in-app purchases. The sandbox environment is very buggy. For example, trying to resubscribe once a subscription has expired doesn’t work in the sandbox. In the WWDC videos, they talked a lot about the new StoreKit testing feature in Xcode, but… how do I get the Apple server to send me a DID_FAIL_TO_RENEW
notification, for instance? It would be much better if they provided sample API responses, like Stripe does.
The app review process felt superficial. I don’t think the reviewers actually tested the IAP functionality. The trial account I provided to them still has a trial status after their approval.
It seems like they don’t care whether your IAP works. They just want to see the paywall screen with a title, description, and links to your privacy policy and terms.
I mean, I get why they can’t test the IAP, because it’s time consuming, and because there are too many possible states. But then what’s the point of app review?
After dealing with app review over this IAP thing, I’ve found that motivation can be a fragile thing. I have very little energy left to be excited about the launch of Gibberish.
I’ve updated the download links in the homepage, and I’ll write a proper launch post next time. But for now, this is where I’m at.