Enterprise App Update Distribution on iOS 8
I've also encountered this problem with our app distribution. We were able to fix this issue by 'faking' the bundle identifier inside the .plist using for download distribution, keeping our ipa bundle identifier the same.
For example, in your plist:
bundle-identifier
com.mycom.MyApp
bundle-version
0.2.2
change com.mycom.MyApp to com.mycom.MyApp.ios8fix
The app will be installed using a new app icon, which will disappear after install.
If you already have an install of the app, you will even see a new app icon during install. After the installation this icon disappears, but your already existing version of the app will be updated.
With a clean install the installation icon will disappear and the installed application icon will appear in place.
It looks like iOS 8 is caching the bundle identifiers and compares the requested installs with these cached ones. Most of the times you'll only see an popup asking for install, but nothing happens.
As Sean already noticed, this appears with xCode 6 GM and the official iOS 8 version. Devices which never installed your application before will have no problems to install the app.
iOS 8 - Can't Install Enterprise App
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] : attempt to install invalid profile: 0xe8008011
Sep 9 12:16:56 iPhone installd[40] : 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:
kind
full-size-image
needs-shine
url
https://{path_to_real_image}
kind
display-image
needs-shine
url
https://{path_to_real_image}
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
Auto-updated iOS application for enterprise distribution
Consider getting a mobile device management service. Those are pricey.
OR:
First, enable over-the-air distribution. It will take $300/year enterprise agreement with Apple. Set up a website with the app's IPA archive and descriptive PLIST.
Then code a call-home HTTP request on app startup. You may pull/parse the same PLIST that describes the latest version; it has a bundle version in it. Compare that to the version of the currently running bundle.
When a new version is detected, the app shuts down, opens the browser on the download page. In a softer manner, just notifies the user that an upgrade is available.
I've never tried linking directly to the app's download package, but give it a try. In a perfect world, Safari would open up and ask "Do you want do download MyApp?" right away. In a not so perfect world, the user would have to click a link and then agree to download.
iOS 8.1 Can't install OTA Enterprise app - Unable to download app
I tried all combinations of answers and solutions for iOS 8.1. both on iPads and iPods with getting no step further. The solution that works is using apples testFlight.
I think that the old way is meant not to work so developers would slowly switch to testFlight.
I wasted two working days, hope this helps you rather then wasting time.
About testFlight: testFlight apple page
This simple tutorial lead me: iOS8 testFlight tutorial
UPDATE 1 (24.05.2015):
The enterprise distribution is working now for me.My colleague updated the SSL on the server twice. He updated some two keys that were used for SSL authentication since some certificates have been changed and updated. Also the distribution works on the following devices:
iPod (4th,8.2),iPhone 5S(8.3), iPad 2 (8.3), iPad 4(8.3).
However it doesn't work and doesn't give any error report (or error line) in Xcode - Window - Devices iPad 3 Console. I have been using successfully uploaded my app using Xcode 6.2+ IDE (currently 6.3.1.). In all cases no default plist file was added and I used the plist file from here : Xcode 6 enterprise plist file example
Can I update an iOS Enterprise App in the background like an App Store app can?
The answers in these questions will give you a correct answer:
- Auto-updated iOS application for enterprise distribution
- Update In-House Apps -- iOS Enterprise Developer Program
- Updating iOS apps automatically with an MDM + Enterprise license
There is a solution for this though by Stephen McMahon, but I did not test it.
http://www.techhui.com/profiles/blogs/auto-updating-enterprise-or-ad-hoc-ios-applications
How to update ios6 enterprise apps over the air
Yes, it is possible. When you deploy an Enterprise application it requires a plist that contains metadata about the application. This metadata includes the version number that you can use to check for updates.
BOOL updateAvailable = NO;
NSDictionary *updateDictionary = [NSDictionary dictionaryWithContentsOfURL:
[NSURL URLWithString:@"http://www.example.com/pathToPlist"]];
if(updateDictionary)
{
NSArray *items = [updateDictionary objectForKey:@"items"];
NSDictionary *itemDict = [items lastObject];
NSDictionary *metaData = [itemDict objectForKey:@"metadata"];
NSString *newversion = [metaData valueForKey:@"bundle-version"];
NSString *currentversion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
updateAvailable = [newversion compare:currentversion options:NSNumericSearch] == NSOrderedDescending;
}
Once you detect the update is available navigate the user to the download URL
itms-services://?action=download-manifest&url=
and it will install over the existing version leaving all data in-tact and even upgrade the CoreData database if you setup auto migration and make changes.
Related Topics
What Is an "Unwrapped Value" in Swift
How to Simultaneously Satisfy Constraints, Will Attempt to Recover by Breaking Constraint
A Complete Solution to Locally Validate an In-App Receipts and Bundle Receipts on iOS 7
How to Compare Two Uiimage Objects
Allow Only Numbers For Uitextfield Input
Error: "The Sandbox Is Not in Sync with the Podfile.Lock..." After Installing Restkit with Cocoapods
Unique Values of Array in Swift
How to Save Local Data in a Swift App
Unexpected Cfbundleexecutable Key
Sprite Kit & Playing Sound Leads to App Termination
Resizing Uitableview to Fit Content
Changing Tint/Background Color of Uitabbar
Remove or Uninstall Library Previously Added: Cocoapods
Xcode, Where to Assign the Segue Identifier
Navigation Bar With Uiimage For Title