iOS 8 – 无法安装企业应用程序

我们公司有一个应用程序,可以通过使用企业分布的网站下载。

企业分销网站

在iOS 8 Beta 5中,点击下载链接会popup“(网站)想要安装(应用程序名称)”的预期popup窗口。 点击“安装”该对话框首先导致应用程序卡住“等待…”

应用程序等待

直到最后表示:“无法下载应用程序(应用程序名称)目前无法下载。”

无法下载应用程序

按照预期使用iOS 7安装工程。

在iOS 8下从Xcode运行应用程序。

我们如何支持企业分发iOS 8?

也许需要对Manifest文件进行更改? 当我尝试在Xcode 6 Beta 7中构build应用程序时,企业存档过程不会提示我创build清单文件…

通过电话控制台试图安装我的应用程序,我发现:

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) 

我不知道的原因,苹果失去了一半的个人资料,并没有提醒我。 进入developer.apple.com后,find任何无效的configuration文件:

点击Edit – > Generate – > Download用新的configuration文件重build应用程序。

但是 – 坏消息仍然至less有一个我的应用程序无法安装。 通过控制台看没有给我什么。 我确信这是一个苹果的故障,所以提出了一个雷达:17622725

我希望你的问题是一个configuration文件的问题,否则我们可能要等到今晚1800GMT,看看苹果是否已经修复它。

编辑

使用iOS8 GM – 我只是Waiting... – 我将随时向您通报错误报告的进展情况。

编辑

排除故障后,已find几个修复程序:

修复1

从iOS8开始,如果您在manifest plist中链接的图像不存在 – Apple将不会在手机上安装应用程序 – 清单是您在下载页面链接到的文件: itms-services://?action=download-manifest&url={url}

确保存在full-size-imagedisplay-image

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

修复2

如果以前在iOS7上存在,则由于iOS8的问题,企业应用程序将无法安装。 控制台中出现错误:

 Ignore manifest download, already have bundleID: {bundle_id} 

这可以通过临时更改清单文件中的bundleID来解决,但是苹果知道它们将错误报告标记为重复。 在内部testing之后,您也可以通过hibernate主屏幕布局General -> Reset -> Reset Home Screen Layout

修复3

如果您看到应用程序进入installing...阶段,而不是loading...几乎肯定是问题是embedded provisioning profile已过期,修复下载,您将需要重新存档应用程序与一个新的,更新configuration文件。

修复4

如果您看到应用程序进入installing...阶段,并且您的provisioning profile有效 – 请在连接到控制台的同时下载该应用程序。 (Xcode 6> Window> Devices> Bottom Left Button [v]),您可能会发现安装失败, Verification Stage Failed ,稍后将显示错误消息。 在我的情况下(Entitlements found that are not permitted by provisioning profile) – 对于此错误goto developer.apple.com并更新您的应用程序标识符包括正确的服务。 我需要启用App Groups 。 然后重新生成provisioning profile

我今天遇到同样的问题:我无法在IOs8上安装我的企业应用程序(但在IOs7上)。 经过许多小时的search,我终于在设备控制台上看到这条消息:

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

经过长时间的search,我终于看到这个post: http : //support.hockeyapp.net/discussions/problems/26683-not-able-to-download-apps-ios8-beta-5-autoupdate-manually-etc

最后,我只是改变了plist的名称和链接来下载ipa(可能第二个不需要),最后安装了应用程序。

最后,它似乎是IOs8中的一个caching问题,认为该应用程序已经安装(事实并非如此,我之前已经卸载了它)。

希望这个帮助

同样的错误在这里,我试着改变捆绑ID,捆绑版本,plist …但错误依然存在。

我知道这有点棘手,但这是唯一对我有用的东西:

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

  1. 将设备连接到Mac或PC
  2. 在iTunes中创build备份

  3. 安装iExplorer: http : //www.macroplant.com/iexplorer/

  4. 启动iExplorer,然后select演示模式

  5. 在左侧边栏中,select媒体,然后打开下载文件夹,并删除其中的所有文件

  6. 重新启动设备

  7. 打开下载页面并安装最新版本的应用程序

事实上,我省略了前两步,它的工作完美:)

我希望这有帮助

设置部署目标低于

项目>构build设置> iOS部署目标

目标>构build设置> iOS部署目标

我现在只是有这个问题,这是由mainfest plist(键:全尺寸图像+显示图像)引起的URL图像位置不存在。

它看起来像iOS6 / iOS7能够处理,如果图像不存在,但iOS8是更严格的这一点。

基于之前对“忽略清单下载”消息的评论,我们尝试将.plist中的包ID(即com.companyName.AppName)更改为具有唯一名称,以强制iOS 8下载/安装它。 安装完成后,它会正确replace现有的副本。

我相信这里有两个问题。 如果https网站上指向企业证书签名.ipa文件的.plist具有与已安装的应用程序相匹配的绑定标识符,则不会覆盖该应用程序。 我们所有的.plist文件的捆绑版本是不同的,所以它应该安装它。 iOS 7似乎没有这个问题。 我们计划通过搞乱plist中的捆绑标识来解决这个问题,所以它对于构build来说总是独一无二的。

第二个问题是,当它成功安装应用程序时,它不会切换到主屏幕或指示它正在执行任何操作。 在iOS 7中,在提示中select“安装”button后,将切换到图标将变暗的主屏幕,进度指示器将显示下载进度。 然后,应用程序旁边会有一个蓝点,表示它是新的。 使用iOS 8时,它不会切换到主屏幕,因此看起来不起作用。 您可以手动进入主屏幕,并且您应该看到带有进度指示器的黑色图标(现在位于新位置,因为它不知道它将replace现有的应用程序)。 在成功下载/安装之后,它不会在被replace的应用程序上放置蓝点。

希望这可以帮助。

这造成了巨大的痛苦。 我需要在MDM解决scheme之外的员工电话上安装新的应用程序OTA。 我似乎尝试了所有可能的解决scheme,我可以在互联网上find,没有任何工作。 我能得到的最接近的是应用程序进入“加载”阶段。 我的解决scheme花了一个星期的工作,尝试不同的事情。 我不确定哪一个按顺序工作,哪一个工作正常,但这是我做的:

在我的情况下,我以前使用开发人员(而不是企业)帐户的供应configuration文件构build此应用程序。 在Xcode中,我改变了Bundle Identifier给它一个新的名字,例如它最初是com.mydomain.myapp并且变成了com.mydomain.mysuperapp。

确保应用程序中的代码签名有效,并包含企业帐户的分发证书

我曾经使用错误的configuration文件(一个没有身份关联),所以,因为我select了“自动”它build立好,但永远不会安装。 所以,我将Release的代码签名更改为我的分发configuration文件(而不是开发configuration文件)

确保应用程序设置的部署目标足够低,以便下载设备

存档文件并导出用于企业部署

Manifest必须包含57×57 png和512×512 png图像,否则安装不会超过“等待”阶段

我创build了一个如下所示的index.html文件:

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

我使用了一个我在网上find的plist样本,它包含了一些可选的设置。 当我离开这些,下载不起作用。 我把这些拿出来了。 我的清单plist文件被命名为:MyApp.plist,看起来像这样:

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

我将MyApp.plist,index.html,logo57.png,logo512.png和MyApp.ipa上传到DropBox。 我与那些需要下载应用程序的人共享index.html。

然后用户可以点击电子邮件中的共享链接,应用程序应该安装。

编辑:下面的问题是一个红色的鲱鱼。 正如Dylan Hand在上面提到的那样,对我来说问题在于我在清单文件中损坏了图像链接。 显然这对ios7并不重要,但如果这是真的,ios8将不能完成安装。 当我删除这些参考,它完美的工作。


我有同样的症状作为OP(即“无法下载应用程序”消息,但只在iOS 8上)。 当我尝试validation(即组织者 – >validation),我收到以下消息。

验证结果的屏幕截图

这导致我到这个职位: https : //stackoverflow.com/a/25757196/751136

它声称重新生成供应configuration文件应导致一个称为beta-reports-active的新权利。 当我尝试在我的企业帐户中执行此操作时,新configuration文件不具有新的权利。 但是,当我在另一个非企业帐户中重新生成供应configuration文件时,新configuration文件将拥有该字段。

如果使用构build脚本构buildiOS应用程序,并且以前使用带有–sign标志的PackageApplication,则可能会导致问题。 在10.10上构build时,–sign标志不再起作用,并且删除它后,我们再次安装了所有的iOS应用程序。

请参阅: https : //devforums.apple.com/thread/251624?tstart = 0

这个问题使我疯狂,只有这对企业分布有帮助:执行所有必需的构build设置,然后单击“存档”。 执行企业分配过程。 您将显示组织者窗口。 在Mac机上,通过selectKRelease并select“在查找器中显示”find.xcacrchive文件。

用户将被导航到.xcarchive文件所在的文件夹。 右键单击.xcarchive文件,然后select“显示包内容”选项。

在打开的查找器窗口中,转到产品/应用程序select并复制.app文件

在名称为“Payload”的磁盘上的某个位置创build一个新文件夹。注意:文件夹名称区分大小写。 将复制的.app文件粘贴到“Payload”文件夹中。 压缩Payload文件夹以获取Payload.zip文件将Payload.zip文件重命名为.ipa并将其与.plist一起捆绑完成!!! .ipa文件已准备好安装在.xcarchive代中使用的供应configuration文件中注册的设备上。

我解决了这个问题。

  1. 由于Apple已更改了configuration文件,请更新configuration文件(文件1)并将其复制到“Payload /”中。
  2. 确保在“Payload /”中有一个Entitlements.plist(文件2),并且这个plist文件必须是由文本编辑器创build的PLAIN TEXT
  3. 确保“Payload /”中有一个Info.plist(文件3),这是由XCode创build的;
  4. 复制Entitlements.plist(文件4)除“Payload /”以外的任何地方。
  5. 确保文件1-4中的“包标识符”应该相同。
  6. 使用此Entitlements.plist(文件4)重新签署IPA文件。

你可以像这样辞职

 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示例

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

如果你认识中国人,这会有帮助。

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

这些答案是有效的事情来检查,但如果其他人已经像我一样尝试过,仍然有问题,请确保您的应用程序包含适当的plist设置,允许正确压缩导出的归档 。 即使在遵循上述所有步骤之后, 也是我们的要求。 另外值得注意的是,关于确保网站的plist包含有效的图像链接的答案似乎没有影响任何东西,至less对于我们使用XCode 6.3来导出档案。 它工作/不工作,不pipe这些链接是正确的。 这个信息正确无疑是一个好主意。 另一个值得注意的是,如果我们使用XCode 5导出,那么ipa总是以正确的格式(见上面链接的SO文章)。 看来XCode 6+现在对它是挑剔的。

我的问题是通过删除所有build立的outut,然后完全重build来纠正。

这个安装问题的另一个可能的来源是项目和供应configuration文件之间的案例不匹配(特别是自动或其他命令行构build可能)。 捆绑ID是区分大小写的。 例如,如果供应configuration文件中的应用程序包标识符是com.example.MyApp ,并且项目configuration和/或Info.plist使用com.Example.Myapp ,则Xcode 7.1将失败,并出现代码签名错误或回退到通用configurationconfiguration文件(一个* bundle id,这本身可能是一个问题),但xcodebuild命令将成功。 jenkins也会将错误签署的版本上传到Hockeyapp。 构build将下载到客户端设备,但不会安装,因为案件不匹配。

因此,

修复0

检查应用程序包标识符是否在项目和Apple Developer门户中都以相同方式设置。

避免这个问题的最简单的方法是在你的包标识符中总是使用小写字母。 从Apple Developer门户复制包ID并将其粘贴到项目构build设置( PRODUCT_BUNDLE_IDENTIFIER )当然也有帮助。

虽然我有一个企业帐户的问题,但事实上这可能不是特定于这种types的分配。

修复0'

请务必查看苹果的技术说明,称为安装失败故障排除的iOS 。

我的问题是,我有一个空间,在我的ipa文件名,以及在我的plist对该ipa的引用。 删除两个空间都允许安装