111

我有一个通过itmsURL 分发的企业应用程序:

itms-services://?action=download-manifest&url=itms-services://?action=download-manifest&url=https://$MY_PLIST_URL.plist

在 iOS 7 上,下载和更新都可以正常工作。但是,在 iOS 8 上,我收到错误消息:

LoadExternalDownloadManifestOperation: Ignore manifest download, already have bundleID: com.mycom.MyApp

在我的 plist 中,我有

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

在我的 iOS 8 应用上,我运行的是 0.2.1 版

4

13 回答 13

92

我在我们的应用程序分发中也遇到了这个问题。我们能够通过“伪造”用于下载分发的 .plist 中的包标识符来解决此问题,同时保持我们的 ipa 包标识符相同。

例如,在您的 plist 中:

<key>bundle-identifier</key>
<string>com.mycom.MyApp</string>
<key>bundle-version</key>
<string>0.2.2</string>

com.mycom.MyApp更改为com.mycom.MyApp.ios8fix

该应用程序将使用新的应用程序图标安装,安装后该图标将消失。

如果您已经安装了该应用程序,您甚至会在安装过程中看到一个新的应用程序图标。安装后此图标消失,但您现有的应用程序版本将被更新。通过全新安装,安装图标将消失,已安装的应用程序图标将出现在适当位置。

看起来 iOS 8 正在缓存捆绑标识符,并将请求的安装与这些缓存的安装进行比较。大多数情况下,您只会看到一个要求安装的弹出窗口,但没有任何反应。

正如 Sean 已经注意到的,这出现在 xCode 6 GM 和官方 iOS 8 版本中。以前从未安装过您的应用程序的设备在安装应用程序时不会有任何问题。

于 2014-09-20T12:37:23.850 回答
24

这对我来说效果更好,无需触摸您的清单或其他技巧(非常适合plist自动生成的 Xcode Server):

  1. 下载 iExplorer ( http://www.macroplant.com/iexplorer/ )
  2. 插入您的设备
  3. 删除“媒体 > 下载”中的所有文件
  4. 重启设备

这将重置设备缓存,现在您可以像往常一样安装您的应用程序。

于 2015-02-25T19:31:34.263 回答
16

我有同样的问题。我通过以下方式复制它:

1) 在从 iOS 7 升级到 iOS 8 GM 时安装我的应用程序

2) 在 iOS 8 中删除它

3)尝试通过 itms-services 安装它:具有相同的包名称

当我尝试更改服务器 plist 中的包标识符(不在应用程序 Info.plist 中)时,它起作用了(应用程序已下载,没有保留“阴影”图标)。但它看起来像一个苹果虫。

于 2014-09-11T11:53:44.267 回答
11

接受的解决方案不再适用于 iOS9。

我的理解是,Apple 通过阻止临时二进制文件替换库存应用程序或从 App Store 下载的应用程序,关闭了一个严重的 iOS 安全漏洞。有关背景信息,请参阅本文(CVE-2015-3722/3725 和 CVE-2015-3725):

https://www.fireeye.com/blog/threat-research/2015/06/three_new_masqueatt.html

考虑到安全隐患,我不希望这种行为在未来的 IOS 版本中发生变化。替代选择似乎是:

  • 在安装 adhoc 之前删除 App Store 版本
  • 通过更改应用程序和分发 plist 中的捆绑 ID,将临时分发为“新”应用程序
  • 使用 TestFlight
于 2015-09-22T12:01:20.210 回答
9

Take a look over this answer and this answer.

You can fix this issue without any hacks, for iOS8 you have to include in the assets key of the manifest .plist file the display-image and full-size-image keys. They were available in Xcode 5 when saving an archive for enterprise and add-hoc deployment, but were not required.

I have created a gist on github with the template for the install-manifet.plist file.

于 2014-10-09T16:36:12.880 回答
9

Gil 所说的似乎是正确的,但更具体地说,我发现我还需要增加 server.plist 中的 bundle-version 字符串:

    <key>bundle-version</key>
    <string>3.2.2</string>

这至少允许您完成 OTA 安装。

(对不起......会添加到评论中,但我太n00b了。)

于 2014-09-25T20:10:26.370 回答
3

这是在 iOS8 Beta5 中首次发现的错误。而且在GM种子和iOS8.0官方版本中,苹果还没有修复。更多讨论可以在这里找到

我自己正在测试的当前解决方法:

  • 如果您不关心设备中的内容:在设备的 DFU 模式下进行干净还原
  • 如果你想拿回你的东西
    1. 恢复前在 iTunes 中备份您的 iOS 设备(无 Ad-Hoc/企业应用程序)
    2. 干净地恢复您的设备后,安装您的 Ad-Hoc/企业应用程序
    3. 从 iTunes 恢复备份
    4. 现在,您可以自由删除这些 Ad-Hoc/企业应用程序并重新安装它们。
于 2014-09-18T12:59:32.340 回答
3

通过更改 plist 中的捆绑标识符解决了问题。

通常,点击 itms 链接后,它会显示显示图标安装的桌面。但是,对于我的 iOS 8.0 设备,点击 itms 链接后,它不会更改为安装页面,但安装已经在后面了。

于 2014-11-04T03:25:51.797 回答
2

这是极端的,但如果你不能改变你的捆绑标识符,我不能,通过 iTunes 将你的 iPhone 恢复到最新的 iOS 8 并从备份恢复可以解决问题。

于 2014-10-11T23:04:01.790 回答
1

iOS 10 beta 1 也存在同样的问题。

12 月 31 日 19:01:32 iphone-6s itunesstored[98]:LoadExternalDownloadManifestOperation:忽略清单下载,已经有 bundleID:com.***************.ios,阶段:SSDownloadPhaseWaiting

我在这里不明白的一件事是 XCode 设备日志中的日期是 12 月 31 日,但是,设备配置了正确的日期和时间。

更新: 来自 HockeyApp 的人在 WWDC 期间向 Apple 通知了这个问题,并且修复应该在下一个种子中出现。

于 2016-06-15T17:16:03.230 回答
0

确保您拥有完整的互联网访问权限。

我在 OTA 安装和 IOS8 上遇到了同样的问题。因为我在公司代理后面,所以在我设置手动代理设置(在 IOS7 中不需要)来解决该问题之前,上述解决方案不起作用。

于 2014-11-25T15:52:26.160 回答
0

如果您使用构建脚本构建您的 iOS 应用程序,并且您之前使用带有 --sign 标志的 PackageApplication,那么这可能会导致问题。在 10.10 上构建并删除它时,--sign 标志不再起作用,我们的所有 iOS 应用程序都会重新安装。

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

于 2014-10-22T22:09:18.327 回答
0

我刚刚在运行 8.1 的设备上遇到了这个问题,将设备升级到 8.3 已经解决了这个问题。因此,要么该错误不再存在于 8.3 .... 中,要么升级的行为无论如何都会清除缓存的数据。

于 2015-06-09T13:28:05.763 回答