Verifying a release builds - iphone

My projects reference static DLLs I've created. These projects are setup to make sure a corresponding build phase occurs. Meaning, if I build in simulator/debug, the static library will have an up to date simulator/debug build. I can verify my app works fine except for device/release. Is there a way to verify device/release? It's sort of like throwing it over the wall to Apple without any verification.

My recommendation is to use the Release configuration to build with your development profile, and create a new Distribute configuration. The new configuration should be identical to the Release configuration in all ways except that it uses your distribution certs for signing rather than your development certs.
To do this, just go into your project settings, go to the Configurations tab, and duplicate the Release configuration, then rename the duplicate to Distribute. Then go to the Build tab, select the Distribute configuration from the drop down, and change the Code Signing Identity to use your distribution certificate.
Now you are ensured that the output of the two configurations is the same except for the code signing step. If you change build settings in the future, just delete and recreate the Distribute profile to ensure all the settings are the same.

Related

Iphone Distribution error

I am new in iPhone Distribution . I created Apple ID U765UXW88D.com.edwincs.*. and
provisioning profile name is MobileHealthGuide. I made these in Distribution tab.
My xcode version is 3.2.4 While uploading application with application loader , I got this error
Application failed codesign verification. The signature was invalid, or it was not signed with an Apple submission certificate.
My project name is MobileHealthGuide too. I have tried revoking the certificate and provisioning profile, but the error persists.
How can I solve this problem?
I've encountered the same problem too. It showed that I had a duplicate certificate registration in my keychains. Removing one of them (I removed the one from my system keychain) fixed the problem.
Steps that helped me to resolve my problem:
Open KeyChain Access application
Select the 'login' keychain, and select in the bottom pane
'Certificates'
Switch to the 'system' keychain and see if there are certificates
registered in both chains.
Remove one of them
Rebuild the application
You probably need to check what code signing profile is selected in
your distribution build properties.
Alright, then make sure to clean the build & delete the Build folder from the app.
If this doesn't work for you, there is one more alternative :
Verify below steps to create distribution certificate and perform that if you miss anyone.
Generate a certificate signing request in keychain.
Using that create or revoke a DISTRIBUTION certificate in the
portal. after that download and install it and verify key under the
name.
Register the device in the provisioning portal.
Then create or modify a DISTRIBUTION profile in the portal. after
that download and install it and verify it appears to be valid in
Organiser as there are no warnings.
Make sure to select proper build setting in xcode.
Now this will definitely, solve your problem.
Make sure you added right code sign in project target.
Ok so here are detailed steps on how to distribute:
You want to request a development and distribution certificate in Keychain Access and upload it to developer.apple.com (you are part of the developer member program right?)
Create an app ID (in provisioning profiles)
Create a distribution certificate - make sure this and step 2 follow your bundle ID
Download the profile and drag to Xcode
Go to your Xcode project, in the target or project build settings set your code signing option to the Distribution certificate (which must match your Bundle ID and of course your distribution and development certificate) - there might be a recommended or automatic profile, just choose the one that matches your identity and app provisioning profile and Bundle ID
Now go to edit scheme -> then change from debug to release
Then go to project than target than build settings and type in 'Code Signing', change the options to your distribution profile
Set to build for an iOS device (or none at all)
Go to product -> Build For -> Build For Archive
Scroll down on the side (your classes tab etc.) to the product which should be named (AppName.app) and show it in finder.
Create an application on iTunes Connect
Compress the .app and load it to Application Loader
Send it off!
Tips:
Make sure you are using the correct Bundle ID
Try cleaning
Make sure you're certificate is not expired
Here is an expanded list of reasons why this may occur:
Upgrade your xCode! you are using a really old one.
Probably you tried it but go to https://developer.apple.com/ then iOS provisional portal there are lots of tools can help you.
If you are not using inApp purchase, push notification, iCloud etc. you can skip the App ID and just set a general certificate one that would be like U765UXW88D.* so that you don't need to do this process every time for new apps.
Make sure you created distribution certificate and sign with that on xCode for release/distribution.
On xCode itself make sure you defined the bundle ID same as on iTunes connect.
Good luck.
I've got a similar problem as well. In one project, using my dist profile, it works perfectly and I can build to a device.
In another project, when using the same dist profile, the app launches, loads the splash screen, processes the first page and then exits without throwing an error in Xcode or in its own log.
When I change the code signing to a generic dev profile, the app launches without a problem on the desired device.
I've redownloaded the certs, the dist profiles, deleted the old ones.
How is this even remotely possible? And how can this be fixed?
Failed signature verification can happen for many different reasons. See Apple's list of common causes in TN2250.
The most common reason for failing distribution signature validation is because the app was signed with a developer profile instead of a distribution profile, or the app was built with the wrong build configuration. To consider this potential cause check your settings against the recommendations that follow:
The Release build configuration must be assigned to your Archive task. To ensure this, select the "Scheme" pop-up menu in the upper-left corner of the Xcode Toolbar, and choose "Edit Scheme". Select the "Archive" task and make sure the Build Configuration is "Release".
To check that your app is signed with the correct distribution profile, use the steps in section How do I check which certificate was used to sign my app? and ensure the Authority is "iPhone Distribution". If it is not, continue to next bulleted items to correct the responsible configuration.
Ensure that the appropriate distribution provisioning profile that you created for this application on the iOS Portal site is assigned to the Release build configuration. To ensure that use the steps in section Assigning Provisioning Profiles to Build Configurations.
Next, ensure that you are choosing the correct distribution provisioning profile when distributing your app on the Xcode Organizer > Archives tab. To do that, use the sections linked below depending on your distribution method and take special note you're selecting the correct profile on the "Identity" field (Xcode 4-4.2) or "Code Signing Identity" field (Xcode 4.3+) after clicking Submit/Share/Validate or Distribute on the Xcode Organizer > Archives tab.
https://developer.apple.com/legacy/library/technotes/tn2250/_index.html#//apple_ref/doc/uid/DTS40009933-CH1-TNTAG32

Validating app in the App Store - Beginner

I am trying to validate my application, i am going through the doc and it says
Before archiving your application, ensure that the binary is self
contained. That is, if it relies on static libraries, ensure that
those libraries are part of the application binary by setting the Skip
Install build setting to Yes in the Release build configuration of the
target that builds and archives the application.
After following the above step, and when i archive the app i am not seeing the archived file on the table below (in the Organizer). Why is this and how can i submit my app to Validation ? (not submit to app store, Only validation)
Note: When i set Build configuration to Ad Hoc it Archives correctly (and displays in Organizer), but when i set Build configuration to Release, the archive file doesn't get displayed in the organizer.
Setting Skip Install to YES can be problematic sometimes, I'd only use it if you're having a specific problem that it solves. The Xcode users guide isn't as up-to-date as it should be, particularly for recent releases where the archive process has changed significantly.
Try turning Skip Install back to the default NO, and be sure to use the Product > Archive command rather than Build for > Archive.

AppStore submission - how to duplicate the release configuration?

I'm in the throes of attempting to submit an app via XCode 4. I've just noticed, per this url from Apple :
http://tinyurl.com/3ol2qoj
that to prepare an app for submission to the app store in XCode 4, you must:
In your project, duplicate the Release build configuration and name the duplicate “AppStore”.
Set the Code Signing Identity build setting to your team’s distribution code signing identity through the application’s distribution provisioning profile for the AppStore build configuration.
The page shows an image (which I'd post if I knew how) which has the project highlighted (not the targets). The BuildSettings, Code Signing Identity for the project shows an AppStore entry above the Debug and Release entries.
My questions is, what is the method for duplicating that release entry?
You need to go to the Info tab located in the Project settings (not the target apps). You'll see a list of configurations there (Debug, Release). Click on the + at the bottom and then Duplicate "Release" Configuration

invalid entitlements 0xE8008016 when I add the entitlements file

I'm trying to do ad hoc distribution. When I use XCode, the application installs fine on my phone.
In preparation for ad hoc distribution, I created the default entitlements file, unchecked the get-task-allow box, added the entitlements file name to the code signing entitlements line, and tried to install on my phone.
If I have the file in the entitlements in build settings, I get the (dreaded) error
The entitlements specified in your application's Code Signing Entitlements file do not match those specified in your provisioning profile.
(0xE8008016).
This ONLY happens if I have the entitlements file listed in the code signing section.
I created a brand new application to test this, to see what could have gone wrong and this happens with a completely new test application (so it doesn't seem like clean builds, opening and closing XCode, etc will help).
What am I missing? I've read all of the other times this has occurred and nothing seems to apply.
You need to follow these steps
Have you changed the bundle identifier in your project's info.plist???
Please make sure that this also matches with your provisioning profile's identifier.
go to your projects info. select the configuration you want your build to be deployed then check in build settings that you have added the dist.plist file and the provisioning profile is the same thta you need to run with.
If you are making the build for distribution then set the get-task-allow mark as unchecked
Hope this helps.
I've made it! The reason is you got wrong Certificates! If you're using development Certificates, you can't use the distribution Certificates.
Do the following steps:
Remove the provisiong file from the Xcode -> Organizer
Download again from your developer account. Make sure that you have downloaded profile from distribution tab.
Drag and drop that profile to Xcode
Change the bundle identifier of your plist that match with your provisioning profile App ID.
Go to application setting target and active target and choose your profit from there.
Now rebuild and run the app.
It's also worth noting that this problem may be rooted in trying to install properly authored programs on Jailbroken devices. At least in my case, all my development units and I kept getting this error. By adding the get-task-allow BOOL type to a Entitlements.plist file, I still got the error but the files were installed on the devices (live debugging doesn't work though).
Have you checked that the Code Signing Identity values under Project > Build Settings and Targets > Build Settings are correct?
I found I had to add the new device I was testing on to my Provisioning Profile, on the IOS Provisioning Profile Site.
I had not agreed to the new updated licensed agreement from apple.
Briefly :
Please log in to your developer's account -> profile's -> review -> read the agreement or get your lawyer read it for you -> agree (at your own will) -> and again click profile's to check the status of your profile.
In my scenario the valid code signing entity was not showing up. When i followed the above procedure it was visible and i was able to run the app on the device and/or create the iPA file without much difficulty.
For what its worth, I had this issue with one app but not another. Seems the "Provisioning Profile" in Target->BuildSettings->Code Signing had to be set to "Automatic". If you selected one of the ones in the list it failed with this error.
me too got this type of error, i resolved this by deleting current Entitlement.plist and adding new Entitlement.plist.
Because the project i was trying to run was build on 3.2 sdk and current i am using 4.2.
That was the only reason i was getting error
It seems this error code is used for many situations. In my case, the problem started to happen after we set our DataProtectionClass to NSFileProtectionComplete. I'm not sure of the fix yet.
Removing the entitlement wasn't and option for me as I wanted to use "iCloud", so after digging a little I found that the problem was that "iCloud" not being enabled on the app configuration on the "iOS Provisioning portal".
Enabling it and regenerating the provisioning did the trick for me.
My issue was that the Distribution Profile was created as Ad hoc rather than In House making the device I was running the app on not accept it.
Make sure that the device is added to the Provisioning Profile or create an Enterprise Profile.
Another pitfall while trying to correct this error: you'll also need to replace provisioning profiles from embedded extensions.
In my case, the provisioning profile of my iOS app was just fine. It took me hours to figure out that the provisioning profile of my widget (or Today Extension) needed an update, due to a new device to test on.
Make sure you check all relevant and related targets, not only the target you're trying to execute.
Go to Target -> Capabilities - > Associated Domains
Press Fixed issue Button
Run Project

Why Duplicate the “Release” configuration to "Distribution"?

On the Apple guide, there is a step before building the AppStore version:
Open the Xcode project and Duplicate
the “Release” configuration in the
Configurations pane of the project's
Info panel. Rename this new
configuration “Distribution”.
Why this step is needed? Can I skip this step and use the "Release" configuration to build the final version for AppStore?
If you keep your release and appstore configurations separate you're able then to test your application built with exactly the same settings as it will go to appstore and switch to that configuration with 1 click. It may be not necessary but (imo) is really handy.
Another reason may be that while developing you may want to play a bit with some project settings and be sure that your experiments won't go to distribution build by any chance.
You could name it "DebbieGibson" as long as you remember you set that configuration up for App Store distribution.