iphone sdk mobile provisioning (0xe800003a, 0xe8000001, …)

07 Feb
07/02/2009

November 21st, 2008 Update: Apple has made some significant changes (simplification) with the release of version 2.2 of the iPhone SDK. My following article relates to version 2.1. I’m going to update it accordingly to cover the subtle changes that came with version 2.2 and 2.2.1 soon. Until this note is gone, please do be aware that this post does not relate to the latest version and has been written for version 2.1 – many concepts still do apply, so you might find this an interesting read, anyway.

Given the wide popularity, the enormous amount of comments and personal feedback I’ve received so far for my first post about iPhone mobile provisioning and the ongoing discussions in various developer communities related to this topic, I’ve decided to write a follow-up on how to address mobile provisioning issues that tend to arise time and again.

Before you continue to read, why don’t you kick this article to help others finding it, too:
kick it on iPhoneKicks.com

While Apple has made some enhancements to the documentation available via the iPhone Developer Program Portal – you need to be logged in to access the linked content – there still seem to be many problems with respect to setting up and maintaining an iPhone development environment.

I’m trying to provide as much detail as possible for the more subtle parts of the process. I highly recommend to go through all the documentation made available by Apple before consulting my post – specifically you should carefully go through this guide. This post should be considered complimentary.

As always I don’t take any warranty for the material provided here. Use at your own risk!

Prerequisites

Here is a brief overview of the environment I’m working with:

  • I’m an approved and paying member of the iPhone Developer Program.
  • I’m using an Intel iMac with Mac OS X 10.5.5, Xcode 3.1.1 and the final version of iPhone SDK 2.1.
  • All my iPhones are running Apple’s regular firmware version 2.1 (5F136). I’ve got legal net-lock and sim-lock free iPhones. No jailbreaks. No hacks.
  • I’m not using any methods to circumvent Apple’s code signing practices and generally do not endorse those.

The Developer Program Portal

Before you begin to develop applications for the iPhone make sure you log into the iPhone Developer Program Portal. Note: There is a difference between the Developer Center and the Developer Program Portal. Access the Program Portal from within the iPhone Dev Center by clicking the iPhone Developer Program Portal link:

iphoneportallink

 

iPhone Developer Program

Let me clarify an aspect which has caused some confusion in the past: To start developing for the iPhone you do not need to be a paying, registered member of the iPhone Developer Program. The SDK is available for free and can be downloaded after a brief registration. Once you’ve got the SDK you can create applications and test them on the iPhone Simulator that ships with it.

If, however, you want to deploy your application to an actual device – either an iPhone or an iPod Touch – you need to be a paying, registered developer.

While the simulator is good to get up to speed I highly recommend to not underestimate the differences between the real device and the simulated environment. Simulator applications not only run on a different architecture (Intel vs. ARM) but I’ve also run into situations where stuff perfectly worked in the simulated environment but failed on the device. In addition the layout on the iPhone is sometimes slightly (a few pixels) different than the one on the Simulator. If the UI of your application requires pixel precise positioning, you have to deploy to the device to get things right.

Apple has created a complex security ecosystem to endorse its FairPlay digital rights management and to control digital distribution of iPhone applications.

Certificate Mania and Provisioning Profiles

Let’s clarify some terminology:

Development Certificates

Every approved iPhone developer needs a Development Certificate. The steps required to create your certificate include issuing a certificate signing request using the Certificate Assistant provided by the Mac OS X Keychain Access tool. Follow Apple’s guide to create your certificate. It’s very detailed and appropriate for this part of the process.

Mobile Provisioning Profiles

While the certificates stay on your Mac and are used to digitally sign the applications you’ve created, Mobile Provisioning Profiles are transferred to your development devices. Currently there are three types of mobile provisioning profiles:

Development Provisioning Profiles are used exhaustively during the development of an application. They allow Xcode to directly deploy an application to a development device and attach the debugger. Development Provisioning Profiles only work reliably on devices that have been connected to Xcode at least once and “switched into development devices”. You should in general not use Development Provisioning Profiles to provide your friends with your applications for testing.

Ad Hoc Distribution Profiles are used to deploy your application to devices outside your development environment, primarily for beta testing. You can register up to 200 devices and use an Ad Hoc Distribution Profile to allow their owners to run your application. Ad Hoc Distribution Profiles usually are installed onto the devices via iTunes or the iPhone Configuration Utility.

App Store Distribution Profiles are used to distribute your application via Apple’s iTunes App Store. They can only be used for this purpose. You cannot install applications bundled with an App Store Distribution Profile manually to any device. It has to go through the App Store.

In short: Use a Development Provisioning Profile yourself, use an Ad Hoc Distribution Profile for your friends and use the App Store Distribution Profile for Sale!

Getting ready

Installing the certificates

  • Go to the Certificates > Development tab.
  • Download the WWDR Intermediate Certificate.
  • Download your personal Development Certificate by clicking the Download button in the Actions column.
    certificates
  • Install the two downloaded certificates by double-clicking them. This will launch the Keychain Access application. Make sure you install to the login chain which should be selected by default. Validate that your keys have been correctly installed by opening Applications > Utilities > Keychain Access and expanding the iPhone Developer: Your Name section in the login Keychain.
    keychain

Registering devices

In order to use Development Provisioning and Ad Hoc Distribution Profiles, you need to register the devices with Apple.

  • Open iTunes with your device connected.
  • Select your iPhone in the Devices pane and choose the Summary tab.
  • Click once on the Serial Number: label. Do not click on the serial number, you need to click on the label.
    200811101358
  • iTunes will reveal your Device Identifier.
    200811101359
  • Press Command-C to copy the Device Identifier to the clip board.
  • In the iPhone Developer Program Portal go to Devices > Manage.
  • Click Add Devices.
  • Enter a speaking name into the Device Name field and paste the Device Identifier into the Device ID field.

In case you want to send your app to your friends to involve them into beta testing, ask them for their Device Identifiers and register their devices, too.

Generating Application IDs

App IDs are an important piece of the overall iPhone developer infrastructure and one, where I found many people struggling with subtle details. Unfortunately neither the iPhone Developer Program Portal’s How to section nor Apple’s guides are extremely clear on what needs to be done to get things going.

An App ID is a unique digital fingerprint that OS X iPhone uses to grant your application access to a portion of the Keychain and is one part of your provisioning profiles. In the App IDs section of the iPhone Developer Program Portal create an App ID if you have not yet done so. You can give your App ID an arbitrary Name. The name is used for reference purposes only.

The ID itself however must be unique. Therefore most developers use a reversed version of their domain name (or their companies domain name) as it is pretty common for namespaces. In case you don’t want to register every single application you’re going to build, you can create a single App ID which serves as a namespace for multiple apps. For example, I’m using the following ID:

com.straight2market.*

Important Note: Apple generates a Bundle Seed ID for every App ID you create and appends it to your App ID as a prefix, however, the Bundle Seed ID must not be considered as a part of your App ID. So whenever you’re prompted for your App ID anywhere in Xcode or elsewhere, you must only use your App ID without the Bundle Seed ID. To make this very clear: In my case in the ID column of the Portal it says C5LRL9WHCV.com.straight2market.*. The “C5LRL9WHCV” part is the Apple generated Bundle Seed ID and only the com.straight2market.* part is my App ID namespace!

  • Go ahead and create your App ID by going to App IDs > Manage in the iPhone Developer Program Portal
    appids

Setting up Mobile Provisioning Profiles

Next set up at least two Mobile Provisioning Profiles, one for Development and one for Ad Hoc Distribution. Provisioning Profiles serve as the glue between certificates, App IDs and devices and link them together.

Set up your Development Mobile Provisioning Profile first:

  • In the iPhone Developer Program Portal go to Provisioning > Development.
  • Click Add Profile.
  • Enter a speaking Profile Name. I highly recommend to put the term “Development Profile” somewhere into your profile’s name. This will make it more easy to differentiate the profiles later on when you set them up in Xcode. My profile is called “straight2market Dev Profile”.
  • Select which certificate should be used for the profile.
  • Select the App ID for the profile.
  • Check all devices that should become deployable targets for the profile. Note: You might want to register additional devices at a later point of time. This is no problem at all. You can modify an existing profile at any time and include additional devices. Apple will recreate the modified Provisioning Profile instantaneously and you can simply download and use the updated version.

Here’s a screenshot of my Development Provisioning Profile with eight registered iPhones:

provisioningprofiles

You are going to use the Development Mobile Provisioning Profile along with Xcode to deploy directly from Xcode to your device.

Next set up an Ad Hoc Distribution Provisioning Profile to allow distribution of your application to friends and others:

  • Navigate to Provisioning > Distribution in the iPhone Developer Program Portal.
  • Click Add Profile.
  • Select Ad Hoc. (I’m not going to cover App Store distribution in this post!)
  • The rest of the process equals the one for Development Provisioning Profiles.
  • Again, I highly recommend to name your profiles something like “[my company name] Ad Hoc Distribution Profile”.

Download the two profiles you’ve just created and store them in a save location. If you’ve followed my advice and provided speaking profile names, the files you’re going to download will have speaking file names, as well.

Installing Mobile Provisioning Profiles

Once you’ve downloaded the profiles the next step is to install them. The installation requires two steps: First, let Xcode know about the profiles. Second: Sync them to the device(s).

In order to install the profiles to your system you’ve got a couple of options:

  • Drag the .mobileprovision files downloaded from the iPhone Developer Program Portal to the Xcode dock icon.
  • Or: In Xcode select Window > Organizer. In the Devices pane select a connected device. In the Provisioning section of the Summary page click the [+] button. Navigate to your profile file.
  • Or: Drag the .mobileprovision files downloaded from the iPhone Developer Program Portal to the iTunes dock icon.
  • Or: Download the iPhone Configuration Utility which is available as a free download for Mac OS X and Windows. (If you’re managing multiple devices and don’t have Xcode, I recommend to use the iPhone Configuration Utility instead of iTunes as it gives you more control.)

Once you’ve installed the profiles verify that they have been copied (and renamed) to ~/Library/MobileDevice/Provisioning Profiles.

The next time you sync your device (or deploy an application to it via Xcode) the profiles will be installed. Verify that your device shows all of the profiles by going to Settings > General > Profiles.

200811101516

This installation experience is an area, where I’ve seen people going literally nuts. Especially if you’ve played around with profiles a lot your system might be in a state where nothing seems to work anymore.

You might have seen 0xe800003a or 0xe8000001 error codes and frequently have read the annoying “Your mobile device has encountered an unexpected error (0xE8000001) during the install phase: Verifying application” error message.

Here are the good news: While others have stated they resolved these issues by reinstalling the iPhone SDK or even restoring their iPhone to factory state I never ever had to go that far in order to fix things. I’ve got a pretty complex setup comprising multiple provisioning profiles in parallel and multiple iPhones running more than a single profile. I do use more than a single certificate, too. And while I certainly ran into these errors, too, I’ve always been able to fix everything by just checking all the nitty gritty details and verifying that I’ve got everything configured right. I never needed a restore or reinstall. And you won’t either!

So before you’re deciding to delete stuff and to start over again, I’d like to encourage you to read through the Apple guides and take the stuff provided in this post as additional material and I promise you, you will be operational soon! There should be almost no need to reinstall the SDK or restore the device!

Whatever method you’ve selected to install the profiles, at the end of the day your profiles will be stored in ~/Library/MobileDevice/Provisioning Profiles. During installation your mobile provisioning files get a unique name. If you want to know which file maps to which of your profiles, you can open the files with a text editor (Right-click and Open With… TextEdit) and search for <key>Name</key>. The string immediately following this key maps to the speaking name you’ve selected during profile creation.

Here is an important tip: In case you’re continuously experiencing wired issues, go and empty the ~/Library/MobileDevice/Provisioning Profile folder. Don’t worry! You can download your profiles as often as you want through the Portal. Emptying this folder makes 100% sure that no old, outdated or corrupted provisioning profiles are left. In addition you should manually delete installed profiles from your iPhone by selecting Settings > General > Profiles and Remove for each.

Setting up Xcode

If you’ve made it up to this point, half of your journey is done. Overall the next part – getting Xcode up to speed – is pretty straight forward. There are again some subtle details you should be aware of, but again, it can be done. You don’t have to reinstall the SDK. You don’t have to restore your device. Just be patient and follow along. :-)

Provisioning Profiles

The first thing you want to make sure is that Xcode knows about your provisioning profiles. Launch Xcode. Go to Window > Organizer. Select your connected iPhone in the Devices pane. Make sure you see both profiles in the Provisioning area of the Summary page and both are checked:

200811101521
Note: I’ve got an additional, grayed out profile here which I use for iTunes App Store distribution. You might not find that in your environment.

The next time Xcode talks to your device it’ll make sure that the checked profiles will be installed in case they are not there yet. As a reaction to this post ZDNet’s Ed Burnette remarked, that in his situation he had to manually delete the profiles and add them again. So in case you already had profiles installed, you might want to remove them here and add them again.

Project Settings in Xcode

Let me say this first: If you found this post, you’ve been there, you’ve done this before. You might have gone through this a couple of times. Please, stay tuned and do it again. I promise, at the end you’ll have a working environment.

Open your Xcode project. In case you’ve got none at hand, just create a new one to follow along.

There are a couple of things you have to do before you can compile for device deployment. Unfortunately there also is a difference between deploying for Ad Hoc Distribution and deploying simply to your connected development device. I’ll guide you through both.

Deploying to your locally connected development device

You got to tell Xcode about the App ID you’re going to use. Remember: You’ve created a wildcard App ID (com.straight2market.*) in the iPhone Developer Program Portal before.

In the Resources group of the Xcode Project Explorer find the Info.plist property list and select it. The Property List editor will show you the contents of the file. Make sure that the Bundle identifier falls into the namespace you’ve creates via the wildcard App ID.

By default it is:

200811101535

If for example you’ve created the App ID com.straight2market.* and are going to create a calculator app, you might want to change it into com.straight2market.Calculator. As long as the Bundle identifier matches your App ID namespace it’s fine. Please note that Bundle identifiers have to be unique on the device. Therefore two apps must not share the same Bundle identifier.

Note: It is perfectly legal to just directly type in the Bundle identifier with the Property List editor. Yet there is a more elegant alternative. As you can see in the above screenshot by default Xcode uses a placeholder named ${PRODUCT_NAME:identifier}. You can set the contents for this placeholder by right-clicking the top most node in the project tree and selecting Get Info (or going to Project > Edit Project Settings), selecting the Build page and typing Product Name into the search field. The value you’re assigning here will be taken by Xcode to replace the variable in Info.plist.

So, here is what I usually do:

1. Change the Bundle identifier property in Info.plist:

200811101543

2. Configure the application name in the Build settings for the project:

200811101544

Important Note:

One of the aspects I’ve found not widely known but causing much confusion is that while Xcode lets you edit Build settings and others for the non active configuration, you should not do so! This is so super important, that I’d like to go into more detail.

In various Xcode windows you can see and change the active configuration (highlighted in red below).

200811101549

When you go to Project > Edit Project Settings (or right-click on the root node in the project tree and select Get Info) you can adjust various settings. The editor allows you to modify everything for each configuration. So if for example your active configuration is Debug you could still make changes to the Release configuration.

200811101554

Make sure, you’re making changes to the active configuration. This might be fixed in future Xcode versions but currently if you edit settings for a non active configuration, Xcode sometimes gets things wrong. As an example Xcode might not offer you the correct Mobile Provisioning Profiles. I’ve also seen projects where instead of the correct names of the profiles their unique identifier was shown, some 30 digit hexadecimal code. This might lead to all sorts of issues later on and actually can cause code signing to fail.

Again: In case you want to make changes to the Project Settings of a non active configuration, first activate the configuration and then adjust its changes.

Another aspect many people don’t understand is why some settings appear in bold and others don’t. The answer is easy: Xcode allows to define project settings on various levels. You edit the top most level if you go through Project > Edit Project Settings or right-click on the top project node and select Get Info. You can also adjust settings on a lower level. If you right-click the project node in the Targets group, you can override settings for individual targets.

XCode indicates adjustments made on the current level in bold.

If you made sure that you’re editing the active configuration, there are a couple of things you’ve got to do. Unfortunately things are different depending on whether you configure for development, for Ad Hoc distribution and for App Store distribution. Here is a run down on all three options:

Setting up for development

To be clear: With “setting up for development” I mean you’re setting up a configuration which will allow you to directly deploy to the device from within Xcode. You’re not planning to hand over built apps to your friends. You’re not planning to upload to iTunes Connect!

Go to Project > Edit Project Settings (or right-click the top most node in the project explorer and select Get Info).

Verify you’re changing the active configuration. (Sorry if I repeat myself here.)

Scroll down to the Code Signing section. Change the value of the Any iPhone OS Device property in the Code Signing Identity section from whatever it says to exactly:

iPhone Developer: <your name>

Replace <your name> with precisely the name you’ve used to create your certificate. If you’re not sure use the Mac OS X Keychain Access utility to look it up. Also make sure that there is a blank between the colon and the name. Here is how I’ve set up things:

The name in my certificate:

200811141432

And the settings in Xcode:

200811141434

Next in the Code Signing Provisioning Profile section change the value for the Any iPhone OS Device property to reflect your developer mobile provisioning profile:

200811141436

I once again – I promise it’s the last time – I want to repeat that you have to make sure you change settings for the active configuration. I’ve seen many people stating that their profiles did not show up in the list. There are two main root causes for this:

1. You have a typo in the value you’ve set for the Code Signing Identity. Xcode compares the name you’ve entered with the names assigned to the profiles. If there is no case-sensitive match, it’ll not offer you to set the profile.

2. If you’re not editing settings for the active configuration, Xcode sometimes does not offer anything else than the Default Provisioning Profile for Code Signing Identity.

You’re done for the development set up!

Setting up for Ad Hoc distribution

Ad Hoc distribution allows you to hand out your application to friends and allow them to beta test it.

Go to Project > Edit Project Settings and select the Configurations page. If you’ve started with a clean project you most likely find two configurations, Debug and Release. Select Release and hit Duplicate (it’s at the bottom of the Project Info window). Name the duplicated configuration Ad Hoc Distribution. Actually the name is not important and used for reference purposes only but it makes life easier if you stick to clearly speaking names.

200811141446

Switch to the Device / Ad Hoc Distribution configuration, thus making it active:

200811141452

Open the project settings again. On the Build page make sure you are editing the active configuration. In the Code Signing section for the Code Signing Entitlements property set the value to dist.plist. In the Code Signing Identity section for the Any iPhone OS Device property set the value to exactly:

iPhone Distribution: <your name>

For the Any iPhone OS Device property in the Code Signing Provisioning Profile select your Ad Hoc distribution profile.

200811141454

Again: If the Ad Hoc profile you’ve created does not show up here, chances are, you’re not editing the active configuration.

As the final step you’ve got to add the dist.plist Entitlement file: Right-click on the top most project node and select Add > New File… . Under iPhone OS select the Code Signing category and choose Entitlements.

200811141457

Name the new file dist.plist. The name is not important as long as it matches the settings you’ve made before for the Code Signing Entitlements property.

200811141522

Hit Finish. Double-click the newly created file to open it with the Property List Editor. Deselect (!) the get-task-allow property checkbox.

You’re done for the Ad Hoc Provisioning Profile!

This article has originally appeared in November 2008 on the previous incarnation of my blog and since then received lots of comments from all over the globe. The comments are still available here. If you’d like to add a comment please add it to this updated version of the article as comments on my old site have been closed.

Last but not least, in case you find this article helpful and it might even have saved you valuable time, feel free to donate.


Tags: , ,
31 replies
  1. piku9000 says:

    hello! i have a problem with this whole scheme of code signing… i’m just trying to put a developer profile on the iphone i’m using to develop… i’ve followed this tutorial on the 2.2 sdk… and it worked flawlessly… but now that i’m on 2.2.1… i can’t get the application installed on the iphone… i’ve found out that it wouldn’t sign the application correctly if i didn’t assign the code signing identity and any iphone os values to the developer certificate for my app, on the target app info… i remember i didn’t need to do that… and then i get the dreaded 0xE800003A, i’ve followed all of this step by step… and nothing… any clues?

    Reply
  2. Doug says:

    Great article. I experienced many of the same problems. One note (and perhaps I just built mine wrong and my rejection email is forthcoming from Apple)… if I left the entitlements file in my “app store” release (using my app store provisioning file), I was still able to install the application on my device. Sound weird? Anyway, I’ve submitted it to Apple that way, I’ll let ya know if they reject it or not.

    Reply
    • Nava says:

      Doug,

      Hopefully you’ve found what your problem was, but if not…
      First time I built the app store release with the special App Store profile I could also install it on my device… Sounds familiar. And the problem was as following:

      I duplicated my distribution target in Xcode, in which some beta testing profile was defined. I just changed it to App Store profile and built. Now take a tip: always, after you build an application for distribution, double check, that embedded profile is the one you think you put in your target. Don’t trust Xcode! To check, open it with TextEdit application and look for Name key. In my case, in spite, that I put App Store profile in the Code Sign field it still took a profile for beta testing.

      I opened a project.pbxproj and looked for PROVISION_PROFILE key in Distribution Release setting. There I made sure, that both keys for provision profile have the profile for App Store. Clear All, build and I couldn’t this time to install the application on the device. I could also upload it to App Store.

      Great post, thank you, Ralf.

      Nava

      Reply
  3. Tony says:

    Great article. Wow, there’s more to this than I would have imagined. Are their any good step-by-step books on the market that anyone would recommend for getting started with iPhone development?

    Reply
  4. joe says:

    Awesome article. One question – i’m one of those “friends” that is getting an Ad-Hoc profile and app to test. The ad-hoc provisioning profile is on my iPhone now (i dragged it to iTunes dock), so that seemed positive. Looks like I have a .app file also, so dragged it to iTunes dock too and Sync’d…. but I get a message “the application could not be installed because it could not be verified.” Is there some other part of the process i’m missing?

    Reply
  5. ralf.rottmann says:

    @Joe: If the Ad-hoc provisioning profile has installed correctly on your iPhone and you’re getting this error message, in most cases the app has not been signed correctly. I’d recommend to touch base with the dev and make 100% sure that he used the correct certificate including your Device ID.

    You might also find the tips available here helpful: http://www.codza.com/how-to-fix-iphone-code-signing-errors .

    Hope this helps and let me know!

    Reply
  6. vincent says:

    Thank you for this very useful guide.

    I still haven’t found how to squash the error 0xE800003A (ApplicationVerificationFailed) when trying to deploy my app with on my iPhone (OS 2.0) with a Development profile.

    Everything looks right in my config, except one thing:
    In the project settings, there is no entry “Code Signing Provisioning Profile” after the entry “Code Signing Identity” (and sub-entry “Any iPhone OS Device”).

    You say that you have seen many people stating that their profiles did not show up in the list. My problem is that the entry and the list itself does not show up!

    Do you have any idea on how to fix that?

    Note 1: the Console lists the following errors:

    Thu Mar 12 23:21:00 unknown afcd[298] : user mobile has uid 501
    Thu Mar 12 23:21:00 unknown afcd[298] : mode is 0x41e8
    Thu Mar 12 23:21:01 unknown mobile_installation_proxy[300] : install_embedded_profile: Skipping the installation of the embedded profile
    Thu Mar 12 23:21:01 unknown mobile_installation_proxy[300] : verify_executable: Could not validate signature: e800800e
    Thu Mar 12 23:21:01 unknown mobile_installation_proxy[300] : preflight_application_install: Could not verify /var/tmp/install_staging.OM6U/HelloWorld.app/HelloWorld
    Thu Mar 12 23:21:01 unknown mobile_installation_proxy[300] : install_application: Could not preflight application install
    Thu Mar 12 23:21:01 unknown mobile_installation_proxy[300] : handle_install: Installation failed

    Note 2: I’m using a PowerPC iMac, which means I had to trick somewhat to install the iPhone SDK and code sign (I’m using Tiku’s script, see http://discussions.apple.com/thread.jspa?threadID=1455699&tstart=0).

    Reply
  7. victor says:

    hi,
    I’m having the exact same problem as vincent, using an iMac G4

    Reply
  8. Pickle Pumpers says:

    If you’ve installed the iPhone 3.0 SDK you’ll have to wipe your computer; or I should say I had to.

    Following your guide got me running my own apps in no time flat. The only trick I had to learn was for the sample apps. You have “Show Package Contents” the project file (YourProjectName.xcodeproj) and then you can text edit the “project.pbxproj” file adding your provision profile ID everywhere it says “PROVISIONING_PROFILE”.

    This info was hugely helpfu; thank you very much!

    Pickle Pumpers

    Reply
    • Zephyr Indigo says:

      Pickle finally lead me to the solution of my problems (thank you!)…

      Right-click your Xcode project file “MyApp.xcodeproj” and select “Show Package Contents”.

      Make a copy of project.pbxproj, just in case.

      Edit project.pbxproj and change/remove any lines that are like the following:

      buildSettings = {

      “CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Developer: FirstName LastName”;
      “PROVISIONING_PROFILE[sdk=iphoneos*]” = “XXXXXXXX-1111-YYYY-2222-ZZZZZZZZZZZZ”;

      };

      I actually often had multiple lines for each of CODE_SIGN_IDENTITY and PROVISIONING_PROFILE. But in each case you only want one of each with none of that “sdk = stuff”:

      buildSettings = {

      “CODE_SIGN_IDENTITY” = “iPhone Developer: FirstName LastName”;
      “PROVISIONING_PROFILE” = “XXXXXXXX-1111-YYYY-2222-ZZZZZZZZZZZZ”;

      };

      You’ll probably have at least two sets of these lines, once for Release and once for Debug.

      Once I did this (along with following the thousands of other suggestions along the way) I suddenly had my app on my Touch. Suh Weet!

      Reply
  9. Thierry says:

    Hi

    I’ve uploaded games + prov file and it was working well

    I ‘ve uploaded a new Provisioning file and Apps to iTunes and then on my iPhone: On the iPhone, they dont appear: I have the space where they should be but I can see but the apps.

    Could you tell me if you have seen that before?
    Could you tell me how to clean prov files I have in itunes?

    Thanks

    Reply
  10. Vince says:

    Vincent… I have it working on a G4 using Tiku script. It took me one day, but my (stupid) mistake was pasting the script in a small window of the text editor, breaking the code thanks to the added newlines.

    If you get an error while xcode executes the script you won’t notice since Xcode will consider it a success anyway for some strange reason. It could be something as simple as that, check the script (or maybe the directories, permissions, etc.)

    Reply
  11. Lane Roathe says:

    This took me way to long, but I finally figured out my issue; note that this was after following all of the various steps on the net and in this message … except one, the entitlements plist file, which I could not do because my config didn’t have that option.

    My issue indicators were:

    1. Error “0xE800003A” when trying to install application

    2. After failing to install, noting a Console log message stating

    “unknown mobile_installation_proxy[1382] : entitlement ‘get-task-allow’ has value not permitted by a provisioning profile”

    So, obviously, I had to figure out the entitlements plist config problem.

    The Solution:

    My project had somehow got set to use the simulator SDK as the default; changing this setting to the device fixed all my issues by making the entitlements config option available, and I could then put in the needed reference to the required dist.plist file to turn off get-allow-task. This is the option that is also required:

    SDKROOT = iphoneos2.0 (or Base SDK = Device – iPhone OS 2.0)

    After setting the base sdk to be for the device, the entitlements option magically appeared, I set it to “dist.plist” (which has the flag uncheck) and then my app installed!

    Yea!

    Thanks for the post!

    Reply
  12. Pickle Pumpers says:

    Well, it’s been working great. Then I tried to download someone else’s code I can’t publish it. Oddly I’ve made all the changes to project settings plist but it still says it has the other guys certificate when I try to publish it to my iPhone. Oh well, everything else works fine so I just cut and pasted his code into a new app so I could test it on my phone.

    Thanks again for the great info!

    Peter Ickle
    Pump your Pickle at
    PicklePumpers.com

    Reply
  13. Tony says:

    Hi.

    Under the “Code Signing” section of my “Build Options”, there is no field called “Code Signing Provisioning Profile”. How do I get it to show up?

    Thanks.

    Reply
  14. Sean Kang says:

    This article is so well written, descriptive, and very detailed.
    I am using Xcode 3.1.2, iPhone SDK for iPhone OS 2.2.1, Mac OS 10.5.6….

    A bit of the instructions was slightly not in sync with what I had, but those items seemed to be not important. I finally ran my first iPhone app on the actual device, not just the simulator…

    Thanks!

    Reply
  15. Girish says:

    Thanks for the great article. Without this article, it would have probably taken long time to figure out things as it’s not really straightforward to get the app running on the device.

    *** For others:
    if you encounter AppVerifificationFailed or other 0x00xxxxx errors, do “Build–>Clean All Targets” in XCode before building it again. This simple fix will save you lot of debugging hours.
    ***

    Reply
  16. bhanu says:

    Hi
    i am also getting this Error “Your mobile device has encountered an unexpected error (0xE8000001)” while clicking Build&Go
    i did everything correct
    AppId = BundelIdentifer
    i followed all above tips but still i am not geting same error
    really please help me on this.
    Thanks in advance

    Reply
  17. bhanu says:

    Hi
    vincent and victor i am also having same problem what you was having,
    please help on tis how did you solve that one i am also using PPC G5

    Thanks

    Reply
  18. John Davies says:

    Many thanks for this, it was very clearly written with anough screen shots to solve my “codesign error: code signing is required for product type ‘application’ in sdk ‘device iphone os” problem. It turned out to be my certificate name. I’ve been through this so many times trying to solve the famous “Error 0xE800003A” that I now had several certificates and profiles all with slight variations of my name, “John T Davies”, “John Davies”, “JT Davies” etc. It appears that the latest (after starting from scratch again) reads “iPhone Developer: John Davies” in the Keychain Access certificate line and “Jhon T Davies” next to the key in the private key line. Open the cert up and it reads “iPhone Developer: John Davies (8L78…CM)” which is what XCode had inserted into the code-signing line.

    Anyway, following the instructions apbove solved the problem although I had two attempts on which “John Davies” to use as your example shows both lines being the same. (I know it’s obvious but when you’ve spent hours trying to get this working you’re ready to try anything and everything.). It’s the one on the certificate line “iPhone Developer: John Davies” in my case.

    Finally I’d like to post the reply from Apple that helped me finally get through the “Error 0xE800003A” horror, I’d been working fine on one machine and knew nothing of the horrors of certificates and signing until I tried to put my app onto a second beta tester, I lost days trying to solve it.

    —- A reply from Apple (after 1 default response and 2 other emails) —-

    Hello John,

    The primary issue is reflected by this line in the error log:

    Wed May 13 12:09:35 unknown mobile_installation_proxy[1101] :
    entitlement ‘get-task-allow’ has value not permitted by a provisioning

    You mentioned that you’re doing an Ad Hoc build, and that you’d started to create an Entitlements.plist but didn’t complete it. This would be the issue. In order for an Ad Hoc build to run on a device, you have to have the get-task-allow Entitlement turned off. This is described in the Ad Hoc Distribution section of the iPhone Portal.

    In short, create an Entitlements.plist file (File > New File > Code Signing), uncheck the “get-task-allow” checkbox, and enter the name of the file in your Target’s Code Signing Entitlements section.

    The second issue is that you have two code signing identities selected for your Project and Target. You have “iPhone Developer: John Davies” on the first line, and “iPhone Distribution: John Davies” on the second line.

    Putting aside the inherent conflict of two different code sign identities, there’s also the issue that you should only have one entry, on the Any iPhone OS Device line. Delete the entry on the Code Signing Identity line. Make sure you do this for both your Project and your Target Info windows.

    Be sure to do a clean build after making these changes (it might be worthwhile to delete your entire build folder manually).

    —- Finally after my thank you —-

    I’m glad things are resolved. Xcode can be aggressive with its caching on occasion. I find that these items, done in order of escalation, work to clear out any overly persistent data:

    * Clean builds (Build > Clean all Targets)
    * Deleting the build folders manually
    * Selecting Xcode > Empty Caches…
    * Restarting Xcode
    * Restarting your Mac

    (I haven’t seen an issue that goes past restarting Xcode, but I figured I’d toss it in for completeness.)

    —- I’d like to thank the Ralf for the posting above and the guy at Apple who helped me, I’ve left his name off as I’ve not asked permission to post it, I hope they don’t mind.

    Good luck everyone,

    -John-

    Reply
  19. KeithF says:

    Best web article I’ve found yet on ad hoc distribution, and I’ve just emerged from 3 days of distribution hell and read every fricken article on the web on this topic. Yours is the best. Thanks a million!

    Reply
  20. Rich says:

    Very helpful, thanks for writing this.

    Reply
  21. MisterQQ says:

    I always get the message “Could not support development.” in the XCode organizer. I have a valid provisioning profile installed on my iPhone.
    Can anyone help me ?

    Reply
  22. Clave says:

    I followed all the steps mentioned, but still i’m having the problem of getting Xcode error on provisioning profile as ‘this provisioning profile does not have a valid signature or it has a valid but untrusted signature(or it has a valid but untrusted signature)’ when i try to download my application in my jalibroken iPhone 3G device.

    Please advcie how to resolve this?

    Reply

Trackbacks & Pingbacks

  1. [...] no prescription Synthroid 200 Other site about "Purchase Synthroid no prescription": Cost Synthroid, Buy Synthroid 75 mcg, Synthroid cheap price, Buy Synthroid internet Эротическое [...]

  2. [...]  I can’t hope to cover the whole mobile provisioning process here, but I would recommend Ralf Rottmann’s introduction as a good starting point for the [...]

  3. [...] iphone sdk mobile provisioning (0xe800003a, 0xe8000001, …) | THE NEW 24100.NET (tags: iphone sdk errors iphonedev provisioning) [...]

  4. [...] UPDATE: If you think it should work and it continues to cause problems, use the windows solution (i.e. reboot everything) and do a clean build. Here is a more current discussion. [...]

  5. [...] and difficult course of properly signing my code and getting it running on my iPhone is locaded at 24100.net. And the title of the post is very helpful, because those two errors, 0xE800003A and 0xE8000001, [...]

  6. [...] iphone sdk mobile provisioning (0xe800003a, 0xe8000001, …) | THE NEW 24100.NET (tags: iPhone development)   « links for 2009-02-06 |   [...]

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

* Copy This Password *

* Type Or Paste Password Here *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© Copyright 2013 by Ralf Rottmann. rottmann.net is a work in progress by Ralf Rottmann. This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
If you would like to make use of any of the content you see here, please contact the author.