This isn’t new news – just bits that I couldn’t post because of Apple’s NDA on the technologies behind the iPhone. I wrote the results a little while ago – but I wanted to put something up here for Google to find and help out other folks in case they run into the same issue.
When a distribution binary is created, it gets signed with provisioning profile that has some specific certificates embedded within it. The whole kit gets cryptographically signed, and that signature gets embedded within the application bundle. Buried inside your application, there *should* be a file named
embedded.mobileprovision. The file is a serialize plist with a bunch of certificate and signature information embedded within it. If your build settings are incorrect or otherwise screwed up (which was happening in my case), the signature process simply doesn’t create this file. The AppStore won’t even accept a binary without this file inside it and with the appropriate signatures.
The specific problem was that I’d put in a target specific build setting some time in the past, and when I changed the project build settings according to the directions for distributing a binary, it was getting overwritten with the target specific settings that were incorrect. Instead of giving a warning or erring out when the provisioning file I was pointing to didn’t exist, it just continued on it’s merry way – the log looking for all the world like it was working just fine.
I’ve filed a bug against Xcode for it not warning about the incorrectly specified provisioning profile (radar 6095242).