iOS 8 - Can't Install Enterprise App
Asked Answered
S

15

64

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...

Subcortex answered 8/9, 2014 at 21:20 Comment(10)
We are getting the same thing, but its only localised to our latest iOS7 only apps. This is something that we are actively trying to find a solution to. It has to be something to do with the way we are signing the app.Plywood
@WilliamGeorge you say this only happens with your iOS 7 apps. Does that mean you've had a different result with iOS 8 apps?Subcortex
No, our iOS apps that had a deployment target of iOS6+ downloaded an installed fine. Our apps that have a deployment target of iOS7 only do not - This maybe a red herring though - Our apps although similar have changed vastly since dropping iOS6 support.Plywood
I also wonder if it has to do with the manifest file, but I don't know how to regenerate it in XCode 6. As the OP said, xcode doesn't prompt you to generate a manifest file like it did in xcode 5.Decrease
Other people are also saying that they can't generate manifest files in xcode6. I guess you have to reuse old ones from xcode5 and modify them.Decrease
Experiencing the same issue, can install on any iOS7 device but get the error on all ios8 devices. I have tried everything listed here so far, changing download url, version change made, resigned with xcode 6, checked plist for images and nothing. The console shows no errors at all a few warnings but no clues as to why its failing to install. I have created an apple TSI and used up one of my support issues to hopefully get this resolved. No answer yet... but will report back here when I do get a response.Adley
Apple was no help but ended up resolving my issue it was the 2 keys for the icons for downloading. I was getting the red herring from validate but it had nothing to do with it. Just a note for others those 2 keys are in the manifest file for deployment not the manifest file in your app. Brutal. Since xcode 6 doesn't generate a new manifest file without those keys I am unsure how anyone is expected to be able to deploy apps in ios8 if they had a previous manifest file they were using.Adley
possible duplicate of Enterprise App Update Distribution on iOS 8Diplomatic
This issue is still reproducible in iOS 9.1Parsons
We had a similar issue with out app AAA, the plist file contains the download path of the app, when we opened this url in browser we got 404 Not found. So we tried with other apps (BBB, CCC) on our enterprise system and on accessing the url their ipa files were downloaded. The server was not having the expected path for AAAAirframe
P
63

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

Plywood answered 9/9, 2014 at 14:7 Comment(14)
Thanks for your reply. Turns out I did have invalidated profiles, but regenerating them did not solve the issue. Also tried iOS8 GM and building the app in Xcode 6 GM. No luck yet.Subcortex
I think I found the problem. I had a reference to an image that doesn't exist in my <appname>.plist file. The app installs fine on one of my iOS8 GM devices, but still doesn't install on my personal iOS8 GM device. Can you check your plist file to see if you have a bad image reference and report back?Subcortex
I didn't have any missing images. But you lead me down a good point - I opened Organiser and Validate..d my archive. I got an error message saying Failed to locate or generate matching signing assets This may be the cause of my issues - I will let you know when I proceed.Plywood
Dylan's solution worked for me. I removed the two keys pointing to the images, and it installed fine on iOS8. I also added the ".ios8fix" suffix to the manifest's bundle ID, but that didn't work until I removed the two keys. FYI.Decide
@DylanHand Does the Reset Home Screen Layout help the issue whereby if you already have had the Enterprise App installed when upgrading you can not re-install?Plywood
@WilliamGeorge no luck using Reset Home Screen Layout. I only have the issue on my personal phone, which I upgraded and restored from backup. It may be time to do a clean install.Subcortex
Yes, if you had the enterprise app in your iPhone backup it would fail with the above duplicate bundleID error - Hmm perhaps a full factory reset is the only way...Plywood
I've written the detail in my company blog. see here : teratotech.com/blog/…Casease
Reset Home Screen Layout appears to have no effect on "Ignore manifest download, already have bundleID" bug. Temporary bundle id mangling hack does work.Cumshaw
Worked for us... Thank you so much for your answer.Allative
Strangely enough, as of XCode 6.3 having correct image links or not didn't seem to affect anything in my case. See my answer belowFlak
With Xcode 7 & Jenkins build I'm getting (This provisioning profile cannot be installed on this device.). But if I archive via Xcode and install it on the device will work. Moreover if open the .ipa package generated by Jenkins, and I open the mobile provisioning profile I can see my device UUID in the listGere
This is the error I'm getting #32848371Gere
Thanks. The Fix 1 did it!Forwarding
B
7

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

Barbey answered 21/9, 2014 at 15:51 Comment(3)
You can also read about it here: buildozer.io/ios8 . But this is not the same problem as this question is about, it is a different bug.Heathenry
Seems I was having a similar problem to yourself as soon as I change the Bundle identifier and manifest file it seems to allow me to install on iOS8 I am still testing some other bits out. It appears my next problem is that the ipa is stored on an FTP and need to move to HTTPSRonel
+1 for mentioning device console. It's the first source to look at for my problem. I simply remove existing app, and install the new app successfully.Helot
L
7

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

Lard answered 22/12, 2014 at 13:12 Comment(1)
This works and to refine it a bit more you only need to delete the *.sqlitedb file under the Downloads folder. If you pull the sqlitedb file and query the 'downloads' table a record with your ill fated app id can be seenParsons
P
6

Set Deployment Target Lower in

Project > Build Setting > iOS Deployment Target

Targets > Build Setting > iOS Deployment Target

Painterly answered 3/7, 2015 at 12:16 Comment(1)
That was exactly my problem. Argh!Esmeraldaesmerelda
B
3

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.

Biracial answered 19/9, 2014 at 14:33 Comment(0)
C
3

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.

Cybil answered 25/9, 2014 at 15:14 Comment(2)
For the second issue, if you are launching the itms-services link from an app, you can background the app using the following: [[UIApplication sharedApplication] performSelector:@selector(suspend)];Orgulous
Watch out, my early testing with iOS 9 shows that the ipa does not install at all if the bundle-identifier in the .plist file does not match the actual bundle identifier (this did work on iOS 8).Heathenry
G
2

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.

Gunas answered 20/6, 2015 at 23:4 Comment(0)
D
1

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://mcmap.net/q/196967/-app-quot-does-not-contain-the-correct-beta-entitlement-quot

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.

Decrease answered 18/9, 2014 at 23:50 Comment(0)
T
1

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

Tessellated answered 22/10, 2014 at 22:14 Comment(1)
Thank you, this was actually my case too. The --sign parameter does not seem to be necessary (any more?).Cissiee
H
1

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.

Hexa answered 25/11, 2014 at 21:53 Comment(0)
M
0

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/

Melanism answered 31/3, 2015 at 15:58 Comment(0)
F
0

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.

Flak answered 15/4, 2015 at 16:1 Comment(0)
B
0

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

Bootlace answered 3/6, 2015 at 20:15 Comment(0)
A
0

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.

Astaire answered 28/10, 2015 at 21:18 Comment(0)
B
0

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

Billon answered 15/7, 2016 at 11:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.