The final 10%When you're done programming the app, all you want to do is get it into the various mobile stores so people can start using it. You can't wait to post to all your social media platforms that you have done it. You want to scream from the mountain tops that you have completed your Herculean task, and have something to show for it. Unfortunately you are a staff of one. Before you even think about clicking the submit button, you have to do all of the little things to get it ready for submission. I realize that taking screen shots and making icons in 20 different sizes is important, but that doesn't make it fun.
Google PlayGetting your game into the Google Play store is relatively easy. The trick is the XML manifest. The manifest is like a short description of your game in XML format and is required when compiling the game. Trying to figure out what needs to be in the manifest, and in what format, was an endless back and forth of error messages and googling. Once I got a working manifest I paid my $25 submission fee and uploaded my game into the store. An hour later it was available for download.
iTunes StoreSubmitting my game to the iTunes store was insanely frustrating, and if they weren't 50% of the gaming market I would have skipped it completely. When you make an app for the iTunes store, you need certificates and provisioning profiles for both developement and distribution. The upload process is controlled through the XCode application*. Once your profiles are loaded into XCode, the profiles need to be associated with either distribution or development. If you're lucky, when you submit your app, everything just works. If you're not you get this error...
After searching the internet I found just as many different solutions as there were questions submitted about this error. Fortunately, when you pay your $99 yearly application developer subscription fee you get two incident tickets. So I decided to use one on this problem. After a month and a half of back and forth** with the Apple Support person, let's call him 'Bob'***, I was able to solve the problem on my own. You'll have to hang in until the end to find out what the solution was. Here's the crazy part. The Apple Support reps don't know anything more than you. Maybe that's a little harsh, but there's nothing that my rep told me that I didn't also see online. Even though he works for Apple, Bob has no access to any log files or additional error information to help solve the problem. Those error messages are as cryptic to him as they are to you. Maybe Apple doesn't want to reveal to the end user all the ins and outs of their process, but someone at some point should be able to look at a log file and say, "It is looking for [this] and you gave it [this].
Five days after I submitted my app, I find out that my app was denied.
"Improper Advertising Identifier [IDFA] Usage - Your app contains the Advertising Identifier [IDFA] API but you have not indicated its usage on the Prepare for Upload page in iTunes Connect."
If your app has any kind of advertising in it and you didn't check the box when you submitted your app, you'll get this error. I went back and checked the box. Two days later I got an email that I was missing a screen shot. I faked a screen shot. Two days later my game was approved. You can find it here.
The Moral of the StoryThe moral of the story is, never make any assumptions about an unknown process. What should have taken an afternoon took six weeks. Just remember, the thing that you guessed would be simple might be the piece that causes you to miss your deadline.
What made it work?So here was the trick that allowed me to upload my app. When you create the environment for your app in Apple's Developer center, you have to give it an Application ID. If I was creating an app called, "myApp," it would look something like com.alanhome.myApp. You also have the option for the developer center to create a unique identifier in front of that. That might look like TG9624758.com.alanhome.myApp. When I was downloading my provisioning profiles I had three options, TG9624758.TG9624758.com.alanhome.myApp, TG9624758.com.alanhome.myApp, and com.alanhome.myApp. I'm not sure why the first one had TG9624758 twice. I created provisioning profiles many times to solve the problem, but I never picked the first option. As strange as it looked, the first one was the one I was supposed to pick. Once I revoked the other provisioning profiles and used the one for TG9624758.TG9624758.com.alanhome.myApp it worked.
* XCode is Apple OS X only. If you want to publish an app, you'll need a Mac to get it into the store.
** This back and forth was not an everyday affair. Because this is purely a hobby my submission debugging was confined to the weekends.
*** The names have been changed to protect the unhelpful
Helpful links :
How to Publish from Xcode 5 to the App Store.