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来说是完美的):
- 下载iExplorer( http://www.macroplant.com/iexplorer/ )
- 插入您的设备
- 删除“媒体>下载”中的所有文件
- 重新启动设备
这会重置设备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-image
和full-size-image
键。 在为企业和附加部署保存归档文件时,它们在Xcode 5中可用,但不是必需的。
我已经在install-manifet.plist文件的模板上创build了github的要点。
这是iOS8 Beta5中首次发现的错误。 而且苹果公司在种子和官方的iOS8.0版本上仍然没有确定。 更多的讨论可以在这里find
目前的解决方法正在被我自己testing:
- 如果您不关心设备中的内容:请在设备的DFU模式下进行干净的恢复
- 如果你想让你的东西回来
- 在还原之前在iTunes中备份您的iOS设备(不包括Ad-Hoc /企业应用程序)
- 干净地恢复您的设备后,安装您的Ad-Hoc /企业应用程序
- 从iTunes恢复备份
- 现在您可以自由删除这些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的数据。