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

我有一个企业应用程序,我通过itms URL分发:

 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

我也遇到了我们的应用程序分发这个问题。 我们通过“伪装”.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正在cachingbundle标识符,并将请求的安装与这些caching的安装进行比较。 大多数情况下,您只会看到popup式窗口要求安装,但没有任何反应。

正如肖恩已经注意到的,这与xCode 6 GM和官方的iOS 8版本一起出现。 从未安装应用程序的设备在安装应用程序时没有问题。

这对我来说效果更好,不需要触摸你的清单或其他欺骗(对于自动生成plist Xcode Server来说是完美的):

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

这会重置设备caching,现在您可以照常安装应用了。

我有同样的问题。 我通过转载它:

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

2)在iOS 8中删除它

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

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

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

我的理解是,苹果已经通过阻止adhoc二进制文件replace从App Store下载的股票应用程序或应用程序来closures严重的iOS安全漏洞。 有关背景信息,请参阅此文章(CVE-2015-3722 / 3725和CVE-2015-3725):

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

考虑到安全性的影响,我不希望这种行为在未来的IOS版本中发生变化。 备选scheme似乎是:

  • 在安装adhoc之前删除App Store版本
  • 通过更改应用程序和分配plist中的包ID来将adhoc分配为“新”应用程序
  • 使用TestFlight

吉尔说,似乎是正确的,但更具体地说,我发现我还需要增加server.plist中的捆绑版本string:

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

这至less可以让你完成一个OTA安装。

(对不起…会添加评论,但我太多了)。

看看这个答案和这个答案 。

您可以解决这个问题,不需要任何攻击,对于iOS8,您必须将其包含在清单.plist文件的assets键中,即display-imagefull-size-image键。 在为企业和附加部署保存归档文件时,它们在Xcode 5中可用,但不是必需的。

我已经在install-manifet.plist文件的模板上创build了github的要点。

这是iOS8 Beta5中首次发现的错误。 而且苹果公司在种子和官方的iOS8.0版本上仍然没有确定。 更多的讨论可以在这里find

目前的解决方法正在被我自己testing:

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

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

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

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

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

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

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

更新:来自HockeyApp的伙计们在WWDC期间通知苹果这个问题,修复应该在下一个种子。

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

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

确保你有一个完整的互联网接入。

我正面临与OTA安装和IOS8相同的问题。 因为我在公司代理的后面,所以上面的解决scheme不能工作,直到我设置手动代理设置(在IOS7中不需要)来解决这个问题。

我刚刚在运行8.1的设备上遇到这个问题,将设备升级到8.3已经解决了这个问题。 所以无论是8.3中不存在的bug还是升级行为都清除了caching的数据。

Interesting Posts