iOS 8上的企业应用更新分发

时间:2014-09-10 18:36:54

标签: ios xcode ios8 enterprise-distribution

我有一个企业应用,我通过itms网址分发:

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

13 个答案:

答案 0 :(得分:90)

我的应用发布也遇到了这个问题。我们能够通过伪造来解决这个问题。 .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版本一起出现。以前从未安装过您的应用程序的设备在安装应用程序时没有任何问题。

答案 1 :(得分:24)

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

  1. 下载iExplorer(http://www.macroplant.com/iexplorer/
  2. 插入您的设备
  3. 删除&#34;媒体&gt;中的所有文件下载&#34;
  4. 重启设备
  5. 这会重置设备缓存,现在您可以照常安装应用程序。

答案 2 :(得分:16)

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

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

2)在iOS 8中删除它

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

当我尝试更改服务器plist中的bundle-identifier(而不是在应用程序Info.plist中)时,它工作正常(应用程序下载时没有“阴影”图标)。但它看起来像一个苹果虫。

答案 3 :(得分:11)

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

我的理解是,Apple已经通过阻止adhoc二进制文件替换从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版本
  • 通过更改两者中的捆绑ID,将adhoc分发为“新”应用 应用程序和分发plist
  • 使用TestFlight

答案 4 :(得分:9)

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

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

这至少可以让你完成OTA安装。

(抱歉......会在评论中添加,但我的n00b太多了。)

答案 5 :(得分:9)

查看this answerthis answer

您可以毫不费力地解决此问题,对于iOS8,您必须在清单assets文件的.plist键中包含display-imagefull-size-image键。在为企业和临时部署保存存档时,它们在Xcode 5中可用,但不是必需的。

我在github上创建了一个带有install-manifet.plist文件模板的要点。

答案 6 :(得分:3)

这是在iOS8 Beta5中首次发现的错误。苹果还没有通过转基因种子和官方iOS8.0版本来修复它。可以找到更多的讨论here

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

  • 如果您不关心设备中的内容:在设备的DFU模式下执行干净恢复
  • 如果你想要你的东西回来
    1. 在恢复之前在iTunes中备份您的iOS设备(没有Ad-Hoc /企业应用程序)
    2. 彻底恢复设备后,安装您的Ad-Hoc /企业应用
    3. 从iTunes恢复备份
    4. 现在您可以自由删除这些Ad-Hoc /企业应用并重新安装。

答案 7 :(得分:3)

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

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

答案 8 :(得分:2)

这是极端的,但如果您无法更改您的捆绑标识符,我无法通过iTunes将iPhone恢复到最新的iOS 8并从备份中恢复来修复此问题。

答案 9 :(得分:1)

iOS 10测试版1存在同样的问题。

  

Dec 31 19:01:32 iphone-6s itunesstored [98]:LoadExternalDownloadManifestOperation:忽略清单下载,已经有了bundleID:com。***************。带相位的ios: SSDownloadPhaseWaiting

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

<强>更新 来自HockeyApp的人在WWDC期间向Apple通报了这个问题,并且应该在下一个种子中进行修复。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

我刚刚在运行8.1的设备上遇到此问题,将设备升级到8.3已解决了该问题。因此,无论是8.3中的错误还是不存在......或者升级行为都会清除缓存的数据。