Finally, I'm an official iOS App Developer

After 6 months or so I finally have a iPad App for sale in the Apple App Store.

You can read more about Imitation Enigma here. 

I started at the beginning of the year, inspired by the move "The Imitation Game."  

I learned Swift and iOS 8 along the way, found a few beta testers, and used Crashlytics fabric to manage that.  By early April I was ready to submit, and started to discover that the hard part of this isn't learning a new language or framework, but learning how to use iTunes connect.

One of the app features is a simulated code book, which I intended to sell as a auto-renewing subscription, which seemed natural since the German Wehrmacht sent out mostly code books.

After waiting about 10 days for the first app review, I got a "metadata" rejection and a question about what the subscription provided.  I then resubmitted and waited another review cycle and again got a "metadata" rejection saying that an auto-renewing subscription wasn't appropriate for this use, but was for real magazines.

The options were to make the codebook a non-auto renewable subscription, but this would mean I would need to have a server of my own to keep track of when subscriptions were in force.  The other alternative was to make it a non-consumable, in effect a "lifetime" subscription.

So I reworked the app to make the codebook a regular non-consumable purchase, and added a second add on feature purchase. I re-submited the app in early May.

The first review came back with another metadata rejection, they couldn't figure out how to find the place to make the in-app purchases. So I replied with how to do that.

Another review cycle (each one of these took anywhere from a week to 10 days) and they told me that the app wasn't finding the purchases in the store.

The way in app purchases work in both iOS and OS X is that the app has a list of product ids, and makes an SKProductRequest to get the localized descriptions, prices, etc for those purchases.  For development, there's a sandbox app store from which sandbox appleID accounts you set up as a developer can make purchases for testing.

Every thing worked fine in the sandbox, but for some reason when App Review tested the products weren't found.  I didn't understand how this could happen, but I know that there were some problems with iTunes connect when I had uploaded the last build, so I just resubmitted the app again, waited, and got the same rejection.

So it was now time to use one of the Developer Support incidents that come with Apple Developer membership.  So I opened an incident.  When the Developer Support guy got back to me he said that it didn't look like it was a problem with my code, and we had a series of email exchanges where I described what was happening.

Finally the "rubber duck" moment came, he asked if I was sure that the app in review was asking for the product IDs I thought it was.  This prompted me to read the tea leaves in one of the screen shots that app review send me when they couldn't retrieve the products, and it hit me.

There had been a subtle change in the UI between the app when it had a single subscription purchase, and the new version which added the second feature.  The link for the new feature was missing!

Then I realized what had happened.  I'd been submitting new builds to iTunes connect, and I assumed this was all I needed to do.  What' I'd missed was that you need to change the app description record in iTunes connect and tell it which build to use for this version of the app

So all along the problem had been that App Review was still testing the subscription version of the app, which was sending the productID of the auto-renewing subscription product, but that product was no longer in iTunes connect, it had been replaced by the two non-consumable products which had different product ids.

So I changed the description, re-submitted the app, and finally after another week got approval for the App, which became available today.

Phew!