答案 0 :(得分:3)
增量更新定义为“更新,只需要用户下载已更改的代码,而不是整个程序。'
事实上,iOS确实会执行delta更新,并且与Ralph的评论相矛盾,我们确切知道它是如何工作的。对于iOS应用程序,增量更新用于最小化新版本的下载大小,以节省互联网流量。通常,给出大部分大小的程序的东西是静态图像和其他媒体。在诸如错误修复之类的简单更新期间,通常这些静态图像保持不变,并且没有理由再次通过网络发送它们。唯一发送的是实际的Mach-O二进制文件,其中包含有缺陷的代码以及已更改的文件。
因此,delta更新很可能通过校验和运行。当您提交应用更新时,Apple会检查使用某种算法(大多数是SHA1或MD5)提交的所有文件的校验和,以扫描更改。如果可执行文件已更改,但某个图像或其他文件尚未更改,则图像未包含更新,因为用户已下载该图像,并且无需再次下载。虽然此方法可能与增量更新的定义不完全相同,因为它包含可执行文件以及其他类型的文件,但它具有非常相似的概念。
Apple也在iOS的无线更新中使用增量更新。这在任何越狱的iOS设备上都可见。更新将下载到/var/MobileSofwareUpdate/softwareupdate.xxxx
,其中xxxx
可能是构建/发布号。每个软件更新都包含根文件系统的映像,但不包括整个iOS版本。仅需要替换当前用户所在版本中已更改的文件,因此只有这些文件包含在更新包中。查找这些更改的方法可能与iOS应用程序相同,其中校验和可以找到文件中的更改。
基本上,要回答您的问题,Apple的算法不会发送两个单独文件之间的差异(类似于您在git提交中看到的),但会发送整个更新的文件。他们的算法'只查找最后一个版本之间的任何更改,并且不会查找实际的更改本身。事实证明,在OTA更新包中,完整的文件是可用的,而不仅仅是更改的日志。