iOS 8 - Can't Install Enterprise App

IosIphoneEnterprise

Ios Problem Overview


Our company has an app that can be downloaded through a website using Enterprise Distribution.

Enterprise Distribution Site

In iOS 8 Beta 5, tapping the download link brings up the expected pop-up "(website) would like to install (App Name)". Tapping 'install' on that dialog first causes the app to get stuck "Waiting..."

App stuck waiting

Until it finally indicates: "Unable to Download App (app name) could not be downloaded at this time."

Unable to Download App

Installing works as expected using iOS 7.

Running the app from Xcode under iOS 8 works.

How do we support Enterprise Distribution iOS 8?

Perhaps a change needs to be made to the Manifest file? When I tried building the app in Xcode 6 Beta 7, the Enterprise Archival process did not prompt me to make a manifest file...

Ios Solutions


Solution 1 - Ios

Looking through the console of the phone whist attempting to install one of my apps, I discovered:

Sep  9 12:16:56 iPhone misagent[94] <Error>: attempt to install invalid profile: 0xe8008011
Sep  9 12:16:56 iPhone installd[40] <Error>: 0x100484000 -[MIInstallableBundle _installEmbeddedProfileInBundle:]: Could not install embedded profile: 0xe8008011 (Expired)

Reasons unbeknown to me, apple invalidated half of my profiles and failed to alert me. After going into developer.apple.com find any invalid profiles:

Hit Edit - > Generate -> Download Rebuild the application with the new profile.

However - The bad news still at least one of my apps is failing to install. Looking through the console gives me nothing. I am convinced this is an apple bug so have filed a radar: 17622725

I hope your issue is a profile problem otherwise we may have to wait until tonight 1800GMT to see if apple have fixed it.

EDIT

With iOS8 GM - I just get Waiting... - I will keep you informed with the bug report progress.

EDIT

After troubleshooting a few of fixes have been found:

Fix 1

As of iOS8, if the images you are linking to in the manifest plist do not exist - Apple will not install the application on the phone - The manifest being the file that you link to on the download page: itms-services://?action=download-manifest&url={url}

Make sure both full-size-image and display-image exist:

<dict>
    <key>kind</key>
    <string>full-size-image</string>
    <key>needs-shine</key>
    <true/>
    <key>url</key>
    <string>https://{path_to_real_image}</string>
</dict>
<dict>
    <key>kind</key>
    <string>display-image</string>
    <key>needs-shine</key>
    <true/>
    <key>url</key>
    <string>https://{path_to_real_image}</string>
</dict>

Fix 2

Enterprise applications will not install if they existed previously on iOS7 due to a bug with iOS8. An error appears in the console:

Ignore manifest download, already have bundleID: {bundle_id}

This can be fixed by temporarily changing the bundleID in the manifest file, but apple are aware as they marked the bug report as duplicated. After internal tests you an also fix the problem by resting the home screen layout General -> Reset -> Reset Home Screen Layout

Fix 3

If you see the application get into the installing... stage as opposed to loading... almost certainly the problem is the embedded provisioning profile has expired, to fix the download you will need to re-archive you application with a new, updated provisioning profile.

Fix 4

If you see the application get to the installing... stage and your provisioning profile is valid - Download the application whilst attached to your console. (Xcode 6 > Window > Devices > Bottom Left Button [v]), You will probably find that the install failed with Verification Stage Failed a little below will be the error message. In my case (Entitlements found that are not permitted by provisioning profile) - For this error goto developer.apple.com and update your App Identifier to include the correct service. For me App Groups needed to be enabled. Then regenerate your provisioning profile

Solution 2 - Ios

I got the same problem today: I couldn't install one of my Enterprise app on IOs8 (but on IOs7). After many hours of search, I finally read this message on the device console :

<Warning>: LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.ecaste.Crew-Desk

After a long time of searching, I finally read this post : http://support.hockeyapp.net/discussions/problems/26683-not-able-to-download-apps-ios8-beta-5-autoupdate-manually-etc

And by the end I just changed the name of the plist and the link to download the ipa (probably the second is not needed), and finally the app gets installed.

Finally it seems that it was a Cache problem in IOs8 that considers the app was already installed (and that was not the case, I uninstalled it previously).

Hope this help

Solution 3 - Ios

Same error here, I have tried changing bundle-id, bundle-version, plist... but the error remains.

I know that this is a bit tricky, but this is the only thing that works for me:

http://support.hockeyapp.net/discussions/problems/30194-ios8-workaround-can-break-today-extension?full_site=1#comment_35141099

  1. Connect the device to a Mac or PC

  2. Create a backup in iTunes

  3. Install iExplorer: http://www.macroplant.com/iexplorer/

  4. Start iExplorer, then select the demo mode

  5. In the left sidebar, select Media, then open the Downloads folder, and delete all files in it

  6. Restart the device

  7. Open the download page and install the latest version of your app

Indeed I omit the first two steps and it works perfect :)

I hope this helps

Solution 4 - Ios

Set Deployment Target Lower in

Project > Build Setting > iOS Deployment Target

Targets > Build Setting > iOS Deployment Target

Solution 5 - Ios

I just had this problem right now and it was caused by the mainfest plist (keys: full-size-image + display-image) are pointing at url image locations that do not exist.

It looks like that iOS6/iOS7 are able to handle if the images do not exist but iOS8 is more restrictive about this.

Solution 6 - Ios

Based on previous comments on the "ignore manifest download" message, we tried changing the bundle ID (ie com.companyName.AppName) in the .plist to have a unique name, to force iOS 8 to download/install it anyway. After it gets installed, it correctly replaces the existing copy.

I believe there are 2 problems going on here. If the .plist on the https website pointing to the enterprise certificate signed .ipa file has a bundle-identifier matching an application that's already installed, it won't overwrite it. The bundle-version is different on all our .plist files, so it should install it anyway. iOS 7 doesn't seem to have this issue. We plan to work around this issue by messing up the bundle-identifier in the plist so it's always unique to the build.

The second issue is that when it is successfully installing the application, it doesn't switch to the home screen or indicate it's doing anything at all. In iOS 7, after selecting the "Install" button at the prompt, would switch to the Home screen where the icon would be dark, and a progress indicator would show downloading progress. Then the application would have a blue dot next to it indicating it was new. With iOS 8, it doesn't switch to the Home screen so it appears to be not working. You can manually go to the home screen, and you should see a dark icon with a progress indicator (now at a new location, because it doesn't know it will be replacing an existing application). After it downloads/installs successfully, it doesn't place the blue dot on the replaced application.

Hope this helps.

Solution 7 - Ios

This caused me huge pain. I needed to install a new app OTA on just employee phones outside of an MDM solution. I seemed to try every possible solution I could find on the internet and nothing worked. The closest I could get was for the app to get to the ‘loading’ stage. My solution has taken a week of work, trying different things. I’m not sure which worked in which order and which would have worked anyway, but here’s what I did:

In my case, I had previously built this app with a provisioning profile from a developer (as opposed to an Enterprise) account. In Xcode, I changed the Bundle Identifier to give it a new name, for example, it was originally com.mydomain.myapp and became com.mydomain.mysuperapp.

Ensured code signing in the app was valid and included the distribution certificate for the Enterprise account

I had used the wrong provisioning profile (one with no identities associated) so, because I chose ‘automatic’ it built fine but was never going to install. So, I changed code signing for Release to my distribution profile (rather than development profile)

Made sure the app was set with a deployment target low enough for the devices that will download it

Archived the file & exported for Enterprise deployment

Manifest must contain the 57x57 png and the 512x512 png image otherwise the install doesn’t get past the ‘waiting’ stage

I created an index.html file that looked like this:

<html>
    <body>
        <a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/dw80wahlwupkyd5/MyApp.plist">
            Install Learning Chunks App from Dropbox</a>
    </body>
</html>

I had used a plist sample that I found online and it included some optional settings. When I left these in, the download didn’t work. I took those out. My manifest plist file was named: MyApp.plist and looked like this:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>https://dl.dropboxusercontent.com/s/r1bljbkcows7sje/mysuperapp.ipa</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
              <string> https://dl.dropboxusercontent.com/s/ujk9ipcv2naltut/logo57.png</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
                  <string>https://dl.dropboxusercontent.com/s/gpebomok83mp9d5/logo512.png</string>
                    </dict>
            </array>
            <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>com.mydomain.mysuperapp</string>
                    <key>bundle-version</key>
                    <string>1.0</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>title</key>
                    <string>My Super App</string>
                    <key>subtitle</key>
                    <string>My Super App</string>
                </dict>
        </dict>
        </array>
    </dict>
</plist>

I uploaded the MyApp.plist, index.html, logo57.png, logo512.png and MyApp.ipa to DropBox. I shared the index.html with those who need to download the app.

The user can then click on the shared link in the email and the app should install.

Solution 8 - Ios

EDIT: The issue below is a red herring. As Dylan Hand mentioned above, the problem for me was that I had broken image links in the manifest file. Apparently this didn't matter for ios7 but ios8 won't finish the install if this is true. When I removed those reference, it worked perfectly.


I have the same set of symptoms as OP (ie. "Unable to download app" message but only on iOS 8). When I try to validate (ie Organizer -> Validate), I receive the following message.

Screenshot of the result of validation

This led me to this post: https://stackoverflow.com/a/25757196/751136

It claims that re-generating your provisioning profiles should result in a new entitlement called beta-reports-active. When I try to do this on in my enterprise account, the new profiles DO NOT have the new entitlement. However, when I regenerate provisioning profiles in another non-enterprise account, the new profiles DO have that field.

Solution 9 - Ios

If you build your iOS apps with a build script and you were previously using PackageApplication with the --sign flag then that may be causing problems. The --sign flag doesn't work any longer when building on 10.10 and removing it got all of our iOS apps installing again.

see: https://devforums.apple.com/thread/251624?tstart=0

Solution 10 - Ios

This issue drove me crazy, Only this helped for Enterprise Distribution: Perform all the required build settings and click on “Archive”. Perform the Enterprise Distribution Process. You will be shown Organizer window. On Mac machine locate the .xcacrchive file by selecting KRelease and choosing “Show in finder”.

User is navigated to the folder where the .xcarchive file is located. Right-click the .xcarchive file and select “Show Package Contents” option.

In the opened finder window go to Products/Applications Select and copy the .app file

Create a new folder somewhere on your disk with the name “Payload” Note: The folder name is case-sensitive. Paste the copied .app file into “Payload” folder. Compress the Payload folder to get Payload.zip file Rename the Payload.zip file to .ipa and bundle it with your .plist Done !!! the .ipa file is ready to be installed on the devices registered in the provisioning profile used in the .xcarchive generation.

Solution 11 - Ios

I have sovled this problem.

  1. Since Apple has changed provisioning profiles, please RENEW the provisioning profiles (File 1) and copy it into the "Payload/".
  2. Make sure there's a Entitlements.plist (File 2) in the "Payload/", and this plist file MUST be PLAIN TEXT which is created by a text editor.
  3. Make sure there's a Info.plist (File 3) in "Payload/", and this is created by XCode;
  4. Copy the Entitlements.plist (File 4) anywhere else except the "Payload/".
  5. Be sure "Bundle identifier" in File 1-4 should be the same.
  6. Use this Entitlements.plist (File 4) to Re-Sign the IPA file.

You can resign it like this

codesign -fs "iPhone Distribution: Your Company Name" --entitlements=/Users/SenTR/Downloads/codesign/Entitlements.plist /Users/SenTR/Downloads/codesign/Payload/Your_Project_name.app

Entitlements.plist sample

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>application-identifier</key>
        <string>PREFIX.yourappBundleID</string>
        <key>aps-environment</key>
        <string>production</string>
        <key>get-task-allow</key>
        <false/>
        <key>keychain-access-groups</key>
        <array>
        	<string>PREFIX.yourappBundleID</string>
        </array>
    </dict>
</plist>

If you know Chinese, this will be helpful.

http://hennry.com/2015/03/fail-to-resign-ipa-since-ios8/

Solution 12 - Ios

These answers are valid things to check, but in case anyone else has tried them like I did and STILL had problems, make sure your app contains the proper plist setting that allows the exported archive to be compressed correctly. This is what bit us, even after following all the steps above. Also of note, the answer that talks about ensuring the web site's plist contains valid image links doesn't seem to affect anything, at least for us using XCode 6.3 to export archives. It worked/didn't work irrespective of those links being correct. It's obviously a good idea to have that info correct though. Another interesting note is if we exported using XCode 5, the ipa's were ALWAYS in the correct format (see linked SO article above); it seems XCode 6+ now is picky about it.

Solution 13 - Ios

My problem was corrected by removing all built outut, then rebuilding completely.

Solution 14 - Ios

Yet another possible source of this installation issue is a case mismatch between the project and the provisioning profile (especially likely with automated or other command-line builds). The bundle IDs are case-sensitive. For example, if app bundle identifier in the provisioning profile is com.example.MyApp and the project configuration and/or Info.plist uses com.Example.Myapp, Xcode 7.1 will fail with a code signing error or fall back to a generic provisioning profile (one with * bundle id, which might itself be an issue) but xcodebuild command will succeed. Jenkins will also upload the erroneously signed build to Hockeyapp for example. The build will download to client devices but won't install because of the case mismatch.

Therefore,

Fix 0

Check that the application bundle identifier is set up the same way both in the project and on Apple Developer portal.

The simplest way to avoid this particular issue is to always use lower-case characters in your bundle identifiers. Copying bundle id from Apple Developer portal and pasting it into the project build settings (PRODUCT_BUNDLE_IDENTIFIER) also helps of course.

Though I had the issue with an enterprise account, it might in fact be not specific to this type of distribution.

Fix 0´

Make sure to check out Apple's technical note called Installation Failure Troubleshooting for iOS.

Solution 15 - Ios

My issue was that I had a space both in my ipa filename, and the reference to that ipa in my plist. Removing the space in both allowed the installation

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDylan HandView Question on Stackoverflow
Solution 1 - IosWilliam GeorgeView Answer on Stackoverflow
Solution 2 - IosecasteView Answer on Stackoverflow
Solution 3 - IosEva MadrazoView Answer on Stackoverflow
Solution 4 - IosShrikant TanwadeView Answer on Stackoverflow
Solution 5 - IosSteven TsangView Answer on Stackoverflow
Solution 6 - IosChris JView Answer on Stackoverflow
Solution 7 - IosJanBView Answer on Stackoverflow
Solution 8 - IoseremzeitView Answer on Stackoverflow
Solution 9 - IosJames MooreView Answer on Stackoverflow
Solution 10 - IosthomasView Answer on Stackoverflow
Solution 11 - IosHennryView Answer on Stackoverflow
Solution 12 - IosstonedauwgView Answer on Stackoverflow
Solution 13 - IosMikeView Answer on Stackoverflow
Solution 14 - IosLeon DeriglazovView Answer on Stackoverflow
Solution 15 - IosjimmyjudasView Answer on Stackoverflow