I spend an hour or so fighting with Xcode every time I try to submit an iOS app to the App Store. My problems this time included:
Expired/invalid iPhone distribution certificate
I was submitting an application for an Apple account that I don't own or maintain. At one point I had the proper distribution certificate and private key in my Mac Keychain, but it must have changed or been re-created by another developer since the last time I used it.
Solution: After letting Xcode try to resolve this for me and watching it fail, I generated a new iPhone Distribution certificate by hand and probably caused the same problem for another developer that I experienced myself. Now that other developer's certificate is bad and they don't have the private key. I don't know if it's possible but it certainly isn't clear how to have multiple distribution certificates for the same account or I would have just generated a personal one. As far as I could tell this was not possible. I had to overwrite the existing one.
Making Xcode sync provisioning profiles and certificates
I also had many outdated Provisioning Profiles on my machine and could not get my newly created one to show up or work.
Solution: I found this well hidden button in Xcode Preferences > Accounts > Details to make sure I had the proper new Provisioning Profile. Downloading the new profile and double-clicking it after generating it did not work. Maybe because it had the same name as the old one? Who knows.
My Apple WWDRC cert was expired
Apparently there is something called the Apple Worldwide Developer Relations Certification Authority certificate. Maybe it ships with MacBooks or you get it when you install Xcode, but mine expired in February of 2016, so the new certificate I generated still would not sign the app bundle properly.
Solution: I eventually found my way to http://stackoverflow.com/a/35401483 which provided a link to download the up-to-date certificate, but I would expect Xcode to do this for me or at the very least give me a clearer error message. The error message made it seem like my specific signing certificate was bad, not some global Apple certificate.
After I finally got the app bundle signed and uploaded to iTunes Connect it sat in the "processing" state for what felt like an eternity. It took about 15 minutes this time and I started getting anxious so I searched and found horror stories of apps being stuck in that state for days and developers having to contact Apple to resolve it.
Creating and providing 3 different screenshots for 4 different screen sizes sucks. You have to provide screenshots in the following sizes if your app supports them:
- 620 x 960
- 640 x 1136
- 750 x 1334
- 1242 x 2208
Solution: I cheated and took the largest size screenshots using the iPhone 6s Plus simulator and then scaled and/or cropped to meet the other dimensions. I wish I could just upload one set of screenshots.
I struggle with this every time I have to do it. But I'm not an iOS developer, just a novice making modifications to an existing project. I'm sure real iOS developers have mastered this and don't face these struggles, but I suspect many people struggle the first few to ten times.
Apple, make this easier and more explicit. I think Xcode tries to be too smart and make it easy by automating portions of the process, but not others, which really just makes it more difficult to figure out what you're doing, what Xcode is doing, and how they can conflict with each other.
I guess I need 3 to 5 years experience working in Xcode every day in order to understand this crap.