Errors during ad hoc distribution in iPhone projects

On the request of our clients here you can find some typical error messages that may occur during ad hoc distribution of iPhone applications. The good news is our programmers know what points they used to miss. We all have to look at the two files you have got: 1. The application bundle (xxxxx.app) in an .ipa or .zip file. The .app has been built for distribution with an ad hoc provisioning profile and has a proper unique bundle identifier like com.oaktree-ce.xxxxx. 2. The yyyyy.mobileprovision Provisioning Profile for Ad Hoc Distribution that must include your device’s UDID. You can check it out with a text editor. Search for your UDID number. Do not edit (change) this file, just quit from it. You will find text rows like this:
    <key>ProvisionedDevices</key>
    <array>
        <string>e516a0dd0f913344b4d2f4838468915086b75959</string>
        <string>3ed47686f14c4bc82887dbfd195815609279990a</string>
        <string>c442ff1c0c70c7d1c005c8c4029df79eb6b2d77c</string>
    </array>
Updating an ad hoc application: 1. Delete the existing application from your device. Press and hold down on the application icon until a small delete sign (x) appears. Tap the x and confirm removal. 2. When you get a new mobile provision file remove the old one from the device first. Drag the new file into the left pane of iTunes under the Library (Application) section. Let your computer overwrite the existing file in iTunes if it finds some remains. 3. Plug in your iPhone or iPad device. In iTunes navigate to the Apps tab for your device and verify that the application is in the list and has a checkmark next to it. The app will have a white Application icon there. Press the Sync or Apply button. 4. Launch the application on your device. Once more: before installing a new version of .mobileprovision file, remove the previous one from your device. Find and delete the old profile at: iPhone’s Settings -> General -> Profiles. Some seasonal and special error messages: 1. When you get “The application xxxxx was not installed on the iPhone because the signer is not valid.” the programmers likely sent you a wrong package. Before calling them be sure that that you have dragged the correct mobile provision file into iTunes. Verify that you are attempting to install the application onto a device which UDID number has been perviously sent to the programmers. If the mobile provision profile was issued more than 6 months ago, it has been expired. 2. When you get an unexpected “A provisioning profile named embedded.mobileprovision already exists on this computer. Do you want to replace it?” message from the iTunes, the .app may be in error. Report it to your programmers. They have to look at the Info.plist’s dictionary entry of “Application Requires iPhone Environment” to have to be sure that the value is really set to “true” and not “YES”:
<key>LSRequiresIPhoneOS</key>
<true/>
Yes, true, indeed, an ad-hoc distribution of iPhone and iPad can feel like a never ending challenge for developers. They have to generate a certificate, add some device and application ids, create some provision files, install them all and pray not to get burned. The majority of distribution issues usually come up when Apple releases a new version of the iPhone SDK and they say nothing. 3. When you get “The application “xxxxx.app” could not be added to your iTunes library because it is not a valid application.” message the .app bundle is likely in error. Your programmers must check out if the keys of Bundle identifier (CFBundleIdentifier), Bundle version (CFBundleVersion) and Bundle name (CFBundleName) are all set info.plist file like this:
    <key>CFBundleExecutable</key>
    <string>${EXECUTABLE_NAME}</string>
    <key>CFBundleIdentifier</key>
    <string>com.oaktree-ce.${PRODUCT_NAME}</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.1</string>
    <key>CFBundleName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundleDisplayName</key>
    <string>${PRODUCT_NAME}</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
......
4. Before building for ad-hoc distribution they must uncheck the BOOL value of get-task-allow in the Entitlements.plist file, otherwise you get “The executable was signed with invalid entitlements” error. It’s easy to forget to uncheck the get-tak-allow as we use it in checked state while building debug versions. 5. It is not a likely error message but it has popped up before: “The application xxxxx was not installed on the iPhone because it requires a newer version of iOS software.” Many new features are only compatible with the latest operating system versions and are not backward compatible. Ask your programmers what minimum iOS is required for your application and update your device properly. Currently the minimum operation system version is iOS 3.1 for our applications. In the above examples the xxxxx and yyyyy are the actual name of your application and provisioning file.