I just submitted my first app to iTunes using Xcode4 and iTunes Connect. There was a bit of a learning curve, but after hacking away at it last night I’m happy to say its sitting in Apple’s queue waiting for review.
First off, let me say that even though its a total pain there are some good things that come of it: Because of the validation process they make you go through you don’t have to wonder if there is technically something wrong with your app. The validation phase takes care of making sure you have the basic technical aspects of your app working correctly. This includes verifying certificates are correct, making sure nothing offensive is sent to the store, and making sure the code actually compiles and runs.
Perhaps the most difficult thing for me was to sit down and actually read the manual. The part I missed during the entire development process was the iOS portal:
This is where you look to upload to the portal
This is found when you log into the iOS developer center.
The first thing I missed was that I needed to create a ‘Distribution Certificate’.
This distribution certificate then needed to be downloaded into my Keychain. Basically, once this is done, you click on the file to download it, then click on the downloaded file and it will be inside your keychain. Not too hard right?
The next step is to actually create an App ID. I found this part frustrating as you are not allowed to delete an app id once it is created. In addition to this the App ID you create inside of iOS portal must be the same as the bundle ID of the app as well as the bundle ID that you give to iTunes connect. (More on iTunes connect in a bit). This is the part that took me forever because I renamed my app several times. I started with UCS Tech Ref, then UCS Tech Specs. So my bundle ID was ucstechref, then I changed to ucstechspecs. The problem is that in iTunes Connect, I had already named it ucstechref and I wasn’t allowed to change it.
Anyway, once the app ID was created, I configured them for push downloads by doing the process it describes in the configuration section of App ID. When finished my App ID had these things configured:
The last step in the portal was to create a “Distribution Provisioning Profile” for the App itself.
And that was it for the iOS portal. Now keep in mind that before I ran through the iOS portal to create my App IDs and Distribution provisioning profile, I had to actually create the app in iTunes Connect. This was pretty self explanatory.
The last step was putting it all through in Xcode. First, you need to open the Distribution Provisioning Profile and drag it into the Xcode Organizer. (Open Xcode and click shift+command+2). Once done here, you need to code sign your app:
The final part is to make sure your -info.plist has the Bundle Identifier set to the App ID that you specified in iTunes Connect and the App ID in the iOS Portal.
Now you have to make sure that you have lots of pictures and the right sizes for all of them! That part was actually kind of enjoyable for me. I use Pixelmator to do all my art work and its pretty easy to get the hang of.
Once you have the right icons specified, go into your product Build Settings and check the ‘Validate Built Product’ and you’ll be warned of any issues you have.
Once that passes, you Archive the application, and can now validate, share, or distribute.
Words can not express the relief I felt after I finally validated the app and it passed all the inspections. The next step was to submit the app. I was stoked. App submitted. But then, I got an email from Apple immediately stating that my app was missing an image! I had forgotten an iPad screenshot. I quickly took one, submitted it in iTunes Connect and I am now back to hurry up and wait mode.
All in all a pretty rigorous process. However, I think its good because it filters a lot of junk from getting on to iTunes. Even though some apps are pretty weak in the iTunes store, they still pass enough hoops to make sure that they’re not complete garbage. I’m hoping my users will at least think that about my app… but if they don’t, hey, what do you expect for free?