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